我间歇性地看到了这个问题(Ubuntu 下的 FF45)。每次重新加载时都会检查一些文件,而大多数文件不会。我不太确定什么会告诉 Firefox 在每次加载时都应该检查这样或那样的文件。
根据 jscher2000 在a blog 上的帖子,Firefox 首先检查 Last-Modified,如果过期,则发送请求;请求将在If-None-Match 中包含服务器ETag 的值,我还可以看到If-Modified-Since 标头。
一般来说,Firefox 不会重新请求或重新验证尚未过期的缓存文件。您可以通过更改 about:config 中的设置来更改 Firefox 在客户端的行为(显然您需要清除缓存并重新启动 Firefox 才能使更改生效):
browser.cache.check_doc_frequency(默认为过期后)
browser.cache.check_doc_frequency not working? @ mozillaZine Forums(清除缓存/重启)
看起来我的check_doc_frequency 参数设置为 3,这意味着它应该仅在文档被认为已过期时才检查它们。
可能的值及其影响
0 - 每个会话检查一次页面的新版本(会话在第一个应用程序窗口打开时开始,在最后一个应用程序窗口关闭时结束)。
1 — 每次加载页面时检查新版本。
2 — 从不检查新版本 - 始终从缓存中加载页面。
3 — 当页面过期时检查新版本。 (默认)
我做的一件事是我使用以下两个标题:
Cache-Control: max-age=3600
Expires: Sun, Mar 27 2016 21:13:50
可能存在某种混淆,如果只定义了max-age,那么您会在一些奇怪的情况下运行并错过该特定情况。
以防万一,有我的完整标题:
Cache-Control: max-age=3600,public
Connection: keep-alive, Keep-Alive
Date: Mon, 28 Mar 2016 02:56:20 GMT
Etag: 6b395ccb5b0a913f1828cce3e2756bdc
Expires: Mon, 28 Mar 2016 03:56:19 GMT
Keep-Alive: timeout=15, max=5
Server: Apache
Set-Cookie: ...
Connection 字段中重复的Keep-Alive 值来自 Apache。