我一直在为这事绞尽脑汁我正在使用NextJS 13的新应用路由器。我尝试通过middleware.ts设置响应Cache-Control头,但它没有改变。我也在next.config.js中尝试过,这也不起作用。我在设置自定义头文件时没有问题,但NextJS总是自动将Cache-Control设置为“no-store,must-revalidate”。我错过了什么?如何更改此标题?
sc4hvdpw1#
带有App Router的NextJS自动处理cache-control头。如果您尝试在next.config.js中设置它,它将在生产环境中被内置缓存机制覆盖在开发模式npm run dev中该高速缓存是no-store, must-revalidate。在生产环境中,NextJS 13使用SWR策略(s-maxage=31536000, stale-while-revalidate)。对于数据获取和动态生成的页面内容,只有缓存失效机制。最初静态呈现的页面目前没有机制在Vercel的托管生态系统之外的初始加载时强制最终用户进行新的获取,该生态系统处理此问题。如果你不需要服务器端渲染,我建议不要使用Next,而使用Vite。如果你确实需要服务器端渲染,并且不想在Vercel上托管,我建议你使用一个不那么黑盒的框架来适应Vercel的生态系统(比如Remix)。
next.config.js
npm run dev
no-store, must-revalidate
s-maxage=31536000, stale-while-revalidate
1条答案
按热度按时间sc4hvdpw1#
带有App Router的NextJS自动处理cache-control头。如果您尝试在
next.config.js
中设置它,它将在生产环境中被内置缓存机制覆盖在开发模式
npm run dev
中该高速缓存是no-store, must-revalidate
。在生产环境中,NextJS 13使用SWR策略(
s-maxage=31536000, stale-while-revalidate
)。对于数据获取和动态生成的页面内容,只有缓存失效机制。最初静态呈现的页面目前没有机制在Vercel的托管生态系统之外的初始加载时强制最终用户进行新的获取,该生态系统处理此问题。
如果你不需要服务器端渲染,我建议不要使用Next,而使用Vite。如果你确实需要服务器端渲染,并且不想在Vercel上托管,我建议你使用一个不那么黑盒的框架来适应Vercel的生态系统(比如Remix)。