为什么图像未在过期时直接从缓存中提供?

时间:2015-08-27 23:34:03

标签: google-chrome http caching

我有一张静态图片,将在9分钟后过期。 它具有服务器设置的以下标头:

缓存控制:max0age = 523 到期日:2015年8月27日星期四23:28:14 GMT(5分钟内) Last-Modified:Wed,12 Nov 2014 08:06:06 GMT

当我刷新页面时,浏览器向服务器发出请求,而不是从缓存中提供服务。正如预期的那样,从服务器获得304。 以下Chrome开发工具的屏幕截图: enter image description here

我将它与使用相同标头缓存的资源(max-age和last-modified)进行比较,并看到该内容直接从缓存中提供:

enter image description here

基本上我有两个问题:

  1. 为什么Chrome无法从缓存中提供图像并根据服务器对其进行验证?
  2. 为什么同样不适用于我的第二个例子,来自Bing.com的js文件,它直接从缓存服务?是因为在缓存控制或激进的到期日期中指定了“public”吗?
  3. 一些澄清:

    1. 我正在刷新这两个例子中的页面。
    2. 我没有做硬刷新(Crtl + R或Ctrl + F5)。
    3. 这不是因为开启了开发工具,我试图关闭开发工具,我在Fiddler看到了相同的内容。

1 个答案:

答案 0 :(得分:0)

您的浏览器正在发送Cache-Control: max-age=0标头。这意味着您刷新时故意绕过缓存。

  • 如果正常导航到页面而不是刷新,则应从缓存中加载图像。
  • 如果您在单击“刷新”时按住Shift键,则会强制进行硬刷新,这也会因If-Modified-Since标题而失败。你将获得200而不是304,没有任何缓存。