如果没有缓存控制标头,浏览器每次加载新(?)页面时都会请求资源。按 F5,您会使该页面中的任何缓存项无效(甚至在逻辑上删除),因为没有可用的本地版本,从而强制完全重新加载 - 我不确定浏览器是否在再次请求它们之前从缓存中删除了这些资源。
有趣的是,某些浏览器中有一些“附加”设置会导致一些优化,例如每次页面加载仅请求一次资源。如果您有一个图像会随着每个请求而更改,例如计数器,即使您多次使用它,您也只会看到该图像的一个版本。
下一个是浏览器通过应用某种本地“首选”缓存来重用未明确设置为 nocache 的图像。如果您希望每次需要将其设置为重新验证并将过期设置为 -1 或类似的东西时都有一个请求。
因此,根据指定的资源,通常不会触发一些默认值,这些默认值与您在阅读规范时所期望的不同。
关于源是本地、驱动器还是真正的远程 Internet 服务器,也可能存在不同的行为。据说并不是所有的浏览器都有不同的行为,我很有限。
有帮助的是查看 www.google.com 并查找其页面请求的跟踪像素(从 metrics.gstats.com 请求的两个 1x1 像素,子域上有随机部分)。
如果您使用 firebug 检查标头,您会看到它们以任何可能的方式指定 nocache 指令。标题如下所示:
Alternate-Protocol 443:quic
Cache-Control no-cache, must-revalidate
Content-Length 35
Content-Type image/gif
Date Mon, 25 Nov 2013 14:33:30 GMT
Expires Fri, 01 Jan 1990 00:00:00 GMT
Last-Modified Tue, 14 Aug 2012 10:47:46 GMT
Pragma no-cache
Server sffe
X-Content-Type-Options nosniff
X-Firefox-Spdy 3
X-XSS-Protection 1; mode=block
尝试将此作为设置并检查这是否解决了浏览器未获取您更改的资源的问题。must-revalidate 指令甚至会导致代理缓存每次都请求资源并检查 304 Not Modified 回复。
我目前遇到类似的事情。我有一个设置 etag 的 localhost 连接,所有发生的事情是缓存从不询问。我没有设置缓存信息等。单独指定 etag 接缝会导致 FireFox 不再请求资源。所以我遇到了与你的问题类似的事情。