【问题标题】:Why does chrome not request more recent version of cached file?为什么 chrome 不请求更新版本的缓存文件?
【发布时间】:2015-03-15 14:35:05
【问题描述】:

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

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

Chrome 将文件的 Last-Modified 日期显示为 Sat, 06 Dec 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, like Gecko) Chrome/39.0.2171.71 Safari/537.36”)

编辑: 这个问题似乎对 Require.js 加载的文件最令人反感,尽管我也遇到过页面中直接引用的 javascript。

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

【问题讨论】:

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


    【解决方案1】:

    事实证明,当服务器响应中未指定 Cache-Control 标头时(至少在未指定缓存行为时),浏览器的缓存行为记录很少。一般来说,在这种情况下,浏览器似乎会根据文件的最后修改日期(如果在响应中声明)、当前日期和 ????

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

    遗憾的是,谷歌关于 HTTP 缓存的官方页面没有提到如果没有设置 header 会发生什么: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?

    【讨论】:

      猜你喜欢
      • 2016-10-30
      • 2018-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 1970-01-01
      • 2018-10-09
      • 2016-05-20
      相关资源
      最近更新 更多