From aa40d3384c5d90ea66879f0b5296c9965b87e41c Mon Sep 17 00:00:00 2001 From: Jake Jarvis Date: Mon, 3 Jan 2022 11:52:32 -0500 Subject: [PATCH] update function cache headers --- pages/api/contact.ts | 4 ---- pages/api/hits.ts | 9 ++------- pages/api/projects.ts | 8 ++------ pages/api/tracks.ts | 12 ++++-------- pages/feed.atom.ts | 4 +++- pages/feed.xml.ts | 4 +++- pages/site.webmanifest.ts | 4 ++-- 7 files changed, 16 insertions(+), 29 deletions(-) diff --git a/pages/api/contact.ts b/pages/api/contact.ts index bd41314f..b6022195 100644 --- a/pages/api/contact.ts +++ b/pages/api/contact.ts @@ -19,12 +19,8 @@ const AIRTABLE_API_ENDPOINT = "https://api.airtable.com/v0/"; const handler = async (req: NextApiRequest, res: NextApiResponse) => { try { - // permissive access control headers - res.setHeader("Access-Control-Allow-Methods", "POST"); - res.setHeader("Access-Control-Allow-Origin", "*"); // disable caching on both ends res.setHeader("Cache-Control", "private, no-cache, no-store, must-revalidate"); - res.setHeader("Expires", 0); res.setHeader("Pragma", "no-cache"); if (req.method !== "POST") { diff --git a/pages/api/hits.ts b/pages/api/hits.ts index 4d92810e..7bf01d45 100644 --- a/pages/api/hits.ts +++ b/pages/api/hits.ts @@ -14,10 +14,6 @@ Sentry.init({ const handler = async (req: NextApiRequest, res: NextApiResponse) => { try { - // permissive access control headers - res.setHeader("Access-Control-Allow-Methods", "GET"); - res.setHeader("Access-Control-Allow-Origin", "*"); - if (req.method !== "GET") { return res.status(405).send(""); // 405 Method Not Allowed } @@ -33,8 +29,8 @@ const handler = async (req: NextApiRequest, res: NextApiResponse) => { // return overall site stats if slug not specified result = await getSiteStats(client); - // let Vercel edge and browser cache results for 15 mins - res.setHeader("Cache-Control", "public, max-age=900, s-maxage=900, stale-while-revalidate"); + // let Vercel edge cache results for 15 mins + res.setHeader("Cache-Control", "s-maxage=900, stale-while-revalidate"); } else { // increment this page's hits. retry 3 times in case of Fauna "contended transaction" error: // https://sentry.io/share/issue/9c60a58211954ed7a8dfbe289bd107b5/ @@ -47,7 +43,6 @@ const handler = async (req: NextApiRequest, res: NextApiResponse) => { // disable caching on both ends res.setHeader("Cache-Control", "private, no-cache, no-store, must-revalidate"); - res.setHeader("Expires", 0); res.setHeader("Pragma", "no-cache"); } diff --git a/pages/api/projects.ts b/pages/api/projects.ts index 72d027f7..270c1bd1 100644 --- a/pages/api/projects.ts +++ b/pages/api/projects.ts @@ -9,10 +9,6 @@ Sentry.init({ const handler = async (req: NextApiRequest, res: NextApiResponse) => { try { - // permissive access control headers - res.setHeader("Access-Control-Allow-Methods", "GET"); - res.setHeader("Access-Control-Allow-Origin", "*"); - if (req.method !== "GET") { return res.status(405).send(""); // 405 Method Not Allowed } @@ -25,8 +21,8 @@ const handler = async (req: NextApiRequest, res: NextApiResponse) => { const result = await fetchRepos(req.query.sort === "top" ? "STARGAZERS" : "PUSHED_AT", limit); - // let Vercel edge and browser cache results for 15 mins - res.setHeader("Cache-Control", "public, max-age=900, s-maxage=900, stale-while-revalidate"); + // let Vercel edge cache results for 15 mins + res.setHeader("Cache-Control", "s-maxage=900, stale-while-revalidate"); return res.status(200).json(result); } catch (error) { diff --git a/pages/api/tracks.ts b/pages/api/tracks.ts index ab711e64..e3f746d3 100644 --- a/pages/api/tracks.ts +++ b/pages/api/tracks.ts @@ -26,10 +26,6 @@ const TOP_TRACKS_ENDPOINT = "https://api.spotify.com/v1/me/top/tracks?time_range const handler = async (req: NextApiRequest, res: NextApiResponse) => { try { - // permissive access control headers - res.setHeader("Access-Control-Allow-Methods", "GET"); - res.setHeader("Access-Control-Allow-Origin", "*"); - if (req.method !== "GET") { return res.status(405).send(""); // 405 Method Not Allowed } @@ -41,13 +37,13 @@ const handler = async (req: NextApiRequest, res: NextApiResponse) => { if (typeof req.query.now !== "undefined") { response = await getNowPlaying(); - // let Vercel edge and browser cache results for 5 mins - res.setHeader("Cache-Control", "public, max-age=300, s-maxage=300, stale-while-revalidate"); + // let Vercel edge cache results for 5 mins + res.setHeader("Cache-Control", "s-maxage=300, stale-while-revalidate"); } else { response = await getTopTracks(); - // let Vercel edge and browser cache results for 3 hours - res.setHeader("Cache-Control", "public, max-age=10800, s-maxage=10800, stale-while-revalidate"); + // let Vercel edge cache results for 3 hours + res.setHeader("Cache-Control", "s-maxage=10800, stale-while-revalidate"); } return res.status(200).json(response); diff --git a/pages/feed.atom.ts b/pages/feed.atom.ts index e5f81db6..fea3923d 100644 --- a/pages/feed.atom.ts +++ b/pages/feed.atom.ts @@ -7,7 +7,9 @@ export const getServerSideProps: GetServerSideProps = async (context) => { const feed = buildFeed(); const { res } = context; - res.setHeader("content-type", "application/atom+xml"); + res.setHeader("content-type", "application/atom+xml; charset=utf-8"); + // cache on edge for one hour + res.setHeader("cache-control", "s-maxage=3600, stale-while-revalidate"); res.write(feed.atom1()); res.end(); diff --git a/pages/feed.xml.ts b/pages/feed.xml.ts index c9bbddfe..bce94fcc 100644 --- a/pages/feed.xml.ts +++ b/pages/feed.xml.ts @@ -7,7 +7,9 @@ export const getServerSideProps: GetServerSideProps = async (context) => { const feed = buildFeed(); const { res } = context; - res.setHeader("content-type", "application/rss+xml"); + res.setHeader("content-type", "application/rss+xml; charset=utf-8"); + // cache on edge for one hour + res.setHeader("cache-control", "s-maxage=3600, stale-while-revalidate"); res.write(feed.rss2()); res.end(); diff --git a/pages/site.webmanifest.ts b/pages/site.webmanifest.ts index fbfc5136..c7f0c1a6 100644 --- a/pages/site.webmanifest.ts +++ b/pages/site.webmanifest.ts @@ -21,8 +21,8 @@ export const getServerSideProps: GetServerSideProps = async (context) => { const { res } = context; // https://developer.mozilla.org/en-US/docs/Web/Manifest#deploying_a_manifest - res.setHeader("content-type", "application/manifest+json"); - // cache for one day + res.setHeader("content-type", "application/manifest+json; charset=utf-8"); + // cache on edge for one day res.setHeader("cache-control", "s-maxage=86400, stale-while-revalidate"); res.write(JSON.stringify(manifest)); res.end();