为什么chrome不会请求更新版本的缓存文件?

时间:2015-01-16 21:44:43

标签: google-chrome http caching google-chrome-devtools

我有一个缓存问题。 Chrome并不总是加载较新版本的网站资源,通常是由Require.js加载的Javascript文件。现在我使用特定文件已超过24小时遇到此问题。

如果我打开devtools(网络标签)打开的页面,有问题的文件通常会显示HTTP 200响应,但在“大小”列中显示“(来自缓存)”。在Headers详细信息中,它显示“显示临时标题”。 Wireshark显示确实没有从服务器请求该文件。

Chrome将文件的上次修改日期显示为星期六,06十二月2014 01:27:55 GMT,但我对服务器的下方原始请求清楚地表明该文件最近发生了更改。

如果我自己做一个原始请求,我在服务器返回的标题中看不到应该导致此问题的任何内容:

GET /js/path/to/file.js HTTP/1.1
Host: static.mydomain.com
User-Agent: Matt

HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Vary: Accept-Encoding
Content-Type: application/javascript
Accept-Ranges: bytes
ETag: "4203477418"
Last-Modified: Fri, 16 Jan 2015 18:28:30 GMT
Content-Length: 5704
Date: Fri, 16 Jan 2015 21:05:06 GMT
Server: lighttpd/1.4.33

.... data here ...

chrome用户在使用不同版本的chrome的多个操作系统上报告了此问题,但我通常不会在其他浏览器上收到有关缓存问题的报告。 (现在我正在使用“Mozilla / 5.0(X11; Linux x86_64)AppleWebKit / 537.36(KHTML,如Gecko)Chrome / 39.0.2171.71 Safari / 537.36”)

编辑: 对于由Require.js加载的文件,问题似乎最具攻击性,尽管我在页面中直接引用了javascript也遇到过它。

我在这里缺少什么?为什么不检查chrome的新版本文件?

1 个答案:

答案 0 :(得分:3)

事实证明,当服务器响应中未指定Cache-Control标头时,浏览器的缓存行为很少(嗯,至少在没有指定缓存行为的情况下)。通常,在这种情况下,浏览器似乎根据文件的上次修改日期(如果在响应中声明),当前日期和????

确定缓存项目的时间。

请参阅:https://webmasters.stackexchange.com/questions/53942/why-is-this-response-being-cached

可悲的是,Google的HTTP缓存官方网页没有提到如果未设置标头会发生什么:https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching

编辑: 我在这里搜索了一些有关所用启发式方法的更具体信息:What heuristics do browsers use to cache resources not explicitly set to be cachable?