Next.js可以为SSR页面返回304 Not Modified状态吗?

toiithl6  于 2023-02-15  发布在  其他
关注(0)|答案(2)|浏览(152)

很明显,Next.js会为SSG页面返回一个304 Not Modified HTTP状态,但是它能为实时呈现的页面返回这个状态吗?
反过来说,Next.js在最初请求SSR页面时是否返回ETag头?
谢谢。

2ekbmq32

2ekbmq321#

您可以更新标题以在页面上添加缓存。有关详细信息,请访问:https://nextjs.org/docs/going-to-production#caching

2admgd59

2admgd592#

从Next.js v13(至少)开始,你似乎可以这样做,但是你必须设置状态代码和ETag/Last-Modified,并自己检查传入的If-None-Match/If-Modified-Since头。
模拟代码:

export const getServerSideProps = async (ctx) => {}
  const { req, res } = ctx;

  if (shouldReturnNotModified(req)) {
    res.statusCode = 304;
    return { props: {} };
  }
  
  res.setHeader('ETag', generateETag(req));
  return { 
    props: await fetchAllTheProps(req),
  };
}

// This is not rendered if the `res.statusCode` is 304
export default function MyPage (props) {
  return (
    <div>
      Render the page's 200 OK response 
      using all the props
    </div>
  );
}

Next.js唯一真正有帮助的是,如果它注意到您将res.statusCode设置为304,则跳过响应主体的呈现。
这些都没有正式的文档记录(在Nextjs文档中搜索“304”返回0个结果)。

相关问题