我对使用 max-age 值设置缓存控制的理解是指示浏览器缓存文件。
我当时的期望是,如果我在相同链接的地址栏上点击“输入”,浏览器将返回 200(来自缓存)响应。
我的问题是,为什么它会返回304 Not Modified响应?
我看到的方式是,使用200(来自缓存)浏览器不再与服务器建立连接以验证文件,并立即提供缓存内容。但是使用304,虽然浏览器不会再次下载文件并且只是指示浏览器提供缓存文件,但它仍然需要发送请求以验证内容的新鲜度。
此处的资产以亚马逊的CloudFront CDN为主,并以Amazon S3存储桶为原点。那里的Cache-Header(在S3中)已经设置好了。对于所有其他自托管资产而言,这不是问题。
感谢您的帮助!
编辑:我发现了What is the difference between HTTP status code 200 (cache) vs status code 304?。其他问题:我已经缓存控制设置为 max-age = 31536000,s-maxage = 2592000,no-transform,public ,我仍然得到304 ,还需要设置过期吗?我之前可以通过Cache-Control在自托管站点上缓存。答案 0 :(得分:1)
您希望看到200内容,而不是304说"未修改"。这是浏览器要求查看内容是否比缓存的内容更新的内容。 304表示"不,不要浪费你的带宽,你的内容是最新的"。它可以通过几种方法实现这一点 - etag和if-modified-since。
例如,我们可以使用your stackoverflow avatar image。当我在Chrome中加载它并查看开发人员工具时,我可以看到它有304响应并且正在传递这两个标题:
if-modified-since:Thu, 28 Jan 2016 13:16:24 GMT
if-none-match:"484ab25da1294b24f8d9d13afb913afd"