没有缓存控制头,浏览器每次加载新页面都会请求资源。按 F5 键会使该页面中的任何缓存项无效(甚至逻辑上删除),强制完全重新加载,因为似乎没有本地版本可用 - 我不确定浏览器是否在再次请求这些资源之前从缓存中删除它们。
有趣的是,某些浏览器中还有一些“额外”的设置,可以导致某些优化,例如仅在每次加载页面时请求资源一次。如果您有一个每次请求都会更改的图像,例如计数器,即使多次使用也只会看到此图像的一个版本。
接下来,浏览器通过应用某种本地的“首选”缓存重用未明确设置为 nocache 的图像。 如果您想要每次请求,请将其设置为重新验证并将过期时间设置为-1或类似内容。
因此,根据资源的不同,指定未设置的内容通常会触发一些默认设置,这些默认设置与从规格中读取的不同。
关于源是否显示为本地、驱动器或真实的远程互联网服务器,可能也会有不同的行为。可悲的是,并非所有浏览器都有不同的操作方式,而且我的选择也很有限。
有帮助的是查看 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
尝试将此设置为检查是否解决了浏览器未获取更改资源的问题。must-revalidate指令将导致代理缓存每次请求资源并检查304 Not Modified回复。
我目前遇到类似的情况。我有一个本地主机连接设置etag,所有发生的事情都是缓存从未询问。我没有设置缓存信息或类似信息。仅指定etag似乎会导致FireFox不再请求资源。因此,我遇到了与您的问题类似的问题。
[a date]
或Cache-Control:max-age=[seconds]
。因为它没有提供任何提示,客户端将使用它喜欢的任何启发式方法(例如,缓存5分钟)。这完全由客户决定,包括查看Last-Modified
日期,猜测内容可能有效的时间长度。如果您没有指定任何内容:您没有任何承诺。(https://dev59.com/PWcs5IYBdhLWcg3wXi1D#49637255) - Ian Boyd