diff --git a/src/run/handlers/server.ts b/src/run/handlers/server.ts index c63cfcd42d..11235ba74b 100644 --- a/src/run/handlers/server.ts +++ b/src/run/handlers/server.ts @@ -48,6 +48,9 @@ const disableFaultyTransferEncodingHandling = (res: ComputeJsOutgoingMessage) => // TODO: remove once https://github.com/netlify/serverless-functions-api/pull/219 // is released and public types are updated interface FutureContext extends Context { + flags: { + get: (name: string) => boolean + } waitUntil?: (promise: Promise) => void } @@ -123,7 +126,9 @@ export default async (request: Request, context: FutureContext) => { await adjustDateHeader({ headers: response.headers, request, span, tracer, requestContext }) - setCacheControlHeaders(response.headers, request, requestContext) + const useCentralCache = context.flags.get('serverless_functions_nextjs_central_cache') + + setCacheControlHeaders(response.headers, request, requestContext, useCentralCache) setCacheTagsHeaders(response.headers, request, tagsManifest, requestContext) setVaryHeaders(response.headers, request, nextConfig) setCacheStatusHeader(response.headers) diff --git a/src/run/headers.ts b/src/run/headers.ts index 53b0137074..6f11ec88da 100644 --- a/src/run/headers.ts +++ b/src/run/headers.ts @@ -220,7 +220,10 @@ export const setCacheControlHeaders = ( headers: Headers, request: Request, requestContext: RequestContext, + useCentralCache: boolean, ) => { + const centralCacheDirective = useCentralCache ? ', persist' : '' + if ( typeof requestContext.routeHandlerRevalidate !== 'undefined' && ['GET', 'HEAD'].includes(request.method) && @@ -232,7 +235,7 @@ export const setCacheControlHeaders = ( // if we are serving already stale response, instruct edge to not attempt to cache that response headers.get('x-nextjs-cache') === 'STALE' ? 'public, max-age=0, must-revalidate' - : `s-maxage=${requestContext.routeHandlerRevalidate === false ? 31536000 : requestContext.routeHandlerRevalidate}, stale-while-revalidate=31536000` + : `s-maxage=${requestContext.routeHandlerRevalidate === false ? 31536000 : requestContext.routeHandlerRevalidate}, stale-while-revalidate=31536000${centralCacheDirective}` headers.set('netlify-cdn-cache-control', cdnCacheControl) return @@ -259,7 +262,7 @@ export const setCacheControlHeaders = ( ) headers.set('cache-control', browserCacheControl || 'public, max-age=0, must-revalidate') - headers.set('netlify-cdn-cache-control', cdnCacheControl) + headers.set('netlify-cdn-cache-control', cdnCacheControl + centralCacheDirective) return }