diff --git a/api/index.js b/api/index.js index 8fbe2bc..b449d43 100644 --- a/api/index.js +++ b/api/index.js @@ -61,7 +61,12 @@ export default async (req, res) => { CONSTANTS.ONE_DAY, ); - res.setHeader("Cache-Control", `public, max-age=${cacheSeconds}`); + res.setHeader( + "Cache-Control", + `max-age=${ + cacheSeconds / 2 + }, s-maxage=${cacheSeconds}, stale-while-revalidate=${CONSTANTS.ONE_DAY}`, + ); return res.send( renderStatsCard(stats, { diff --git a/api/pin.js b/api/pin.js index ef14994..4838b0f 100644 --- a/api/pin.js +++ b/api/pin.js @@ -58,7 +58,12 @@ export default async (req, res) => { cacheSeconds = CONSTANTS.FOUR_HOURS; } - res.setHeader("Cache-Control", `public, max-age=${cacheSeconds}`); + res.setHeader( + "Cache-Control", + `max-age=${ + cacheSeconds / 2 + }, s-maxage=${cacheSeconds}, stale-while-revalidate=${CONSTANTS.ONE_DAY}`, + ); return res.send( renderRepoCard(repoData, { diff --git a/api/top-langs.js b/api/top-langs.js index 1b6b980..d183d3b 100644 --- a/api/top-langs.js +++ b/api/top-langs.js @@ -52,7 +52,12 @@ export default async (req, res) => { CONSTANTS.ONE_DAY, ); - res.setHeader("Cache-Control", `public, max-age=${cacheSeconds}`); + res.setHeader( + "Cache-Control", + `max-age=${ + cacheSeconds / 2 + }, s-maxage=${cacheSeconds}, stale-while-revalidate=${CONSTANTS.ONE_DAY}`, + ); return res.send( renderTopLanguages(topLangs, { diff --git a/api/wakatime.js b/api/wakatime.js index 7680b76..d439c5b 100644 --- a/api/wakatime.js +++ b/api/wakatime.js @@ -52,7 +52,12 @@ export default async (req, res) => { cacheSeconds = CONSTANTS.FOUR_HOURS; } - res.setHeader("Cache-Control", `public, max-age=${cacheSeconds}`); + res.setHeader( + "Cache-Control", + `max-age=${ + cacheSeconds / 2 + }, s-maxage=${cacheSeconds}, stale-while-revalidate=${CONSTANTS.ONE_DAY}`, + ); return res.send( renderWakatimeCard(stats, { diff --git a/tests/api.test.js b/tests/api.test.js index e183085..0037bcd 100644 --- a/tests/api.test.js +++ b/tests/api.test.js @@ -160,7 +160,12 @@ describe("Test /api/", () => { expect(res.setHeader.mock.calls).toEqual([ ["Content-Type", "image/svg+xml"], - ["Cache-Control", `public, max-age=${CONSTANTS.FOUR_HOURS}`], + [ + "Cache-Control", + `max-age=${CONSTANTS.FOUR_HOURS / 2}, s-maxage=${ + CONSTANTS.FOUR_HOURS + }, stale-while-revalidate=${CONSTANTS.ONE_DAY}`, + ], ]); }); @@ -170,7 +175,12 @@ describe("Test /api/", () => { expect(res.setHeader.mock.calls).toEqual([ ["Content-Type", "image/svg+xml"], - ["Cache-Control", `public, max-age=${15000}`], + [ + "Cache-Control", + `max-age=7500, s-maxage=${15000}, stale-while-revalidate=${ + CONSTANTS.ONE_DAY + }`, + ], ]); }); @@ -191,7 +201,12 @@ describe("Test /api/", () => { expect(res.setHeader.mock.calls).toEqual([ ["Content-Type", "image/svg+xml"], - ["Cache-Control", `public, max-age=${CONSTANTS.ONE_DAY}`], + [ + "Cache-Control", + `max-age=${CONSTANTS.ONE_DAY / 2}, s-maxage=${ + CONSTANTS.ONE_DAY + }, stale-while-revalidate=${CONSTANTS.ONE_DAY}`, + ], ]); } @@ -202,7 +217,12 @@ describe("Test /api/", () => { expect(res.setHeader.mock.calls).toEqual([ ["Content-Type", "image/svg+xml"], - ["Cache-Control", `public, max-age=${CONSTANTS.FOUR_HOURS}`], + [ + "Cache-Control", + `max-age=${CONSTANTS.FOUR_HOURS / 2}, s-maxage=${ + CONSTANTS.FOUR_HOURS + }, stale-while-revalidate=${CONSTANTS.ONE_DAY}`, + ], ]); } @@ -212,7 +232,12 @@ describe("Test /api/", () => { expect(res.setHeader.mock.calls).toEqual([ ["Content-Type", "image/svg+xml"], - ["Cache-Control", `public, max-age=${CONSTANTS.FOUR_HOURS}`], + [ + "Cache-Control", + `max-age=${CONSTANTS.FOUR_HOURS / 2}, s-maxage=${ + CONSTANTS.FOUR_HOURS + }, stale-while-revalidate=${CONSTANTS.ONE_DAY}`, + ], ]); } });