我有一个缓存问题。 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的新版本文件?
答案 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?