浏览器未响应 200(来自缓存)并发送 304 Not Modified

Browser not responding with 200 (from cache) and sending 304 Not Modified

我对使用 max-age 值设置 Cache-Control 的理解是指示浏览器缓存文件。

然后我期望的是,如果我在地址栏上点击 "enter" 以获得相同的 link,浏览器将 return 200(来自缓存) 响应。

我的问题是,为什么 return 收到 304 Not Modified 响应?

我的看法是,对于 200(来自缓存),浏览器不再与服务器建立连接来验证文件,而是立即提供缓存的内容。但是有了304,虽然浏览器不会再次下载文件,只会指示浏览器为缓存文件提供服务,但仍然需要发送请求来验证内容的新鲜度。

此处的资产由 Amazon 的 CloudFront CDN 提供,以 Amazon S3 存储桶为源。那里的缓存头(在 S3 中)已经设置好了。这不是所有其他自托管资产的问题。

感谢您的帮助!

编辑:我找到了这个 。附加问题:我已经将 Cache-Control 设置为 max-age=31536000, s-maxage=2592000, no-transform, public 但我仍然收到 304,是否还需要设置 Expire?之前我可以在自托管网站上使用 Cache-Control 进行缓存。

您希望看到带有内容的 200,而不是说 "not modified" 的 304。那是浏览器询问内容是否比它缓存的内容更新。 304 表示 "no, don't waste your bandwidth, your content is current"。它可以通过几种方法来做到这一点——etag 和 if-modified-since.

例如,我们可以使用your Whosebug avatar image。当我在 Chrome 中加载它并查看开发人员工具时,我可以看到它有一个 304 响应并且正在传递这两个 headers:

if-modified-since:Thu, 28 Jan 2016 13:16:24 GMT
if-none-match:"484ab25da1294b24f8d9d13afb913afd"