【问题标题】:Browser not responding with 200 (from cache) and sending 304 Not Modified浏览器没有响应 200(来自缓存)并发送 304 Not Modified
【发布时间】:2016-08-08 11:50:15
【问题描述】:

我对设置 Cache-Controlma​​x-age 值的理解是指示浏览器缓存文件。

然后我期望的是,如果我在地址栏上为同一链接点击“回车”,浏览器将返回 200(来自缓存) 响应。

我的问题是它为什么返回 304 Not Modified 响应?

我看到它的方式是使用 200(来自缓存)浏览器不再与服务器建立连接以验证文件并立即提供缓存的内容。但是对于 304,虽然浏览器不会再次下载文件,只是简单地指示浏览器提供缓存文件,但它仍然需要发送请求来验证内容的新鲜度。

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

感谢您的帮助!

编辑:我发现了这个What is the difference between HTTP status code 200 (cache) vs status code 304?。附加问题:我已经将 Cache-Control 设置为 ma​​x-age=31536000, s-maxage=2592000, no-transform, public 但我仍然得到 304 ,是否也需要设置Expire?我可以在仅使用 Cache-Control 的自托管站点上进行缓存。

【问题讨论】:

    标签: amazon-web-services browser amazon-s3 browser-cache cache-control


    【解决方案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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-05
      • 2017-10-29
      • 1970-01-01
      • 2016-03-29
      • 1970-01-01
      • 2013-10-28
      • 2021-03-15
      • 1970-01-01
      相关资源
      最近更新 更多