浏览器为何不遵守Cache-Control标头?

时间:2018-07-10 03:44:57

标签: http caching browser-cache cache-control

我在S3上有一个图像,该图像的Cache-Control标头设置为public, max-age=3600。因此,下游系统(代理,浏览器等)应将其缓存1小时。

我可以看到浏览器在后续请求后返回了304(未修改)。

然后我去了S3上的图像并更新了(资源未版本化。URL并未更改,只是_content),但是浏览器却获得了< em> new 版本。 (例如HTTP 200)。

以下是chrome网络流量:

enter image description here

请求:

  1. 200(确定)
  2. 304(未修改)

〜图像在幕后变了〜

  1. 200(确定)
  2. 304(未修改)

这是响应头: enter image description here

这怎么可能?我没有设置正确的标题吗?

两件事让我感到困惑:

  1. 响应仍应为304(未修改)?浏览器如何知道去获取图像?尚未达到max-age吗?
  2. Chrome无法显示“来自磁盘缓存”或其他内容吗? (而不是去服务器吗?)

我的猜测是-我没有设置正确的缓存控制标头或其他内容。所以有人可以请您了解一下这种行为,让我知道我需要做什么来缓存1小时的资源:)

谢谢!

1 个答案:

答案 0 :(得分:2)

响应中指定了ETag

ETag在规范中进行了解释

  

与修改相比,实体标签对验证的可靠性更高   修改存储不方便的情况下的日期
  日期,其中HTTP日期值的一秒分辨率不是
  足够,或者修改日期不一致的情况
  保持。

因此,与基于日期的到期日相比,浏览器更喜欢它。

因此,您的浏览器每次都会发出请求,除非内容已更改-返回http 304。否则-它是http 200。

如果您只希望基于时间的到期日,请删除ETag

参考文献: