Chrome - 为什么发送if-modified-since请求?

use*_*428 19 caching google-chrome http if-modified-since

我有一个包含许多小图像(图标)的页面.与chrome一起使用时,每次重新加载页面时,chrome都会使用if-modified-since标头从服务器请求每个图标.

所有图标都配有expires和max-age标头.Firefox从其缓存中加载图像.

为什么Chrome会这样做,我该如何预防?

谢谢

Pet*_*rta 14

你检查过请求标题了吗?

"'Cache-Control'总是设置为'max-age = 0',无论你按Enter,f5还是ctrl + f5.除非你启动Chrome并输入网址并按回车键."

http://techblog.tilllate.com/2008/11/14/clientside-cache-control/


Rya*_*ohr 13

使用chrome,无论您是刷新页面还是仅仅访问它,都很重要.

刷新时,chrome将为每个文件ping服务器,无论它们是否已被缓存.如果文件尚未修改,您应该看到304 Not Modified响应.如果文件已被修改,您将看到200 OK响应.

如果不刷新,缓存的文件将具有200 OK状态,但如果您查看网络面板的大小/内容列,您将看到(来自缓存).


Kem*_*mal 12

Expires如果RFC不是RFC的有效日期,则Google Chrome会忽略该标头.例如,它总是需要将天数指定为两位数.5月1日应设置为"5月1日"(不是"5月1日"),依此类推.Firefox接受它们,这误导了用户问题出在浏览器(例如Chrome),而不是标题值本身.

因此,如果您手动设置过期日期(不使用mod_expires或类似的东西来计算实际日期),我建议您使用REDbot检查静态文件头.


Jos*_*Lee 9

使用Chrome检查器的快速实验表明,这仅在重新加载页面时发生,而不是在正常加载页面时发生.Chrome只是试图刷新其缓存.想想看-如果你设置ExpiresMax-Age几十年如一日,你问的浏览器缓存该资源和永不检查,看它是否被更新?它尽可能地缓存资源,但是当需要刷新页面时,它希望确保整个页面被刷新.其他浏览器肯定也会这样做(尽管有些人可以选择等待刷新前的小时数).

借助现代浏览器和服务器,刷新大量图标的速度不会像您想象的那么慢 - 请求通过流水线操作来消除多个往返延迟,并且If-Modified-Since标头的整个目的是允许服务器比较时间戳和返回"未修改"状态代码.这将发生在页面需要的每个资源上,但浏览器将能够立即发出所有请求并验证它们都没有更改.

也就是说,您可以采取一些措施来简化这一过程:

  1. 在Chrome的检查器中,使用资源选项卡查看它们的加载方式.如果没有请求标头,则直接从缓存加载资源.如果您看到304 Not Modified,资源已刷新,但不需要再次下载.如果你看到200 OK,它再次被下载.

  2. 在Chrome的检查器中,使用"审核"选项卡查看其对资源可缓存性的看法,以防某些缓存标头不是最佳.

  3. 所有这些If-Modified-Since请求和304响应都可以相加,即使它们只包含标题.将您的图像组合成精灵以减少请求数量.


Flo*_*yer 0

这听起来像是它试图通过询问服务器自上次请求图像以来图像是否已更改来避免过时的缓存。听起来是件好事,而不是你想阻止的事情。