2015-01-16 58 views
2

我有一個緩存問題。 Chrome瀏覽器並不總是加載較新版本的網站資產,大多數情況下是由Require.js加載的JavaScript文件。現在我已經有一個特定的文件超過24小時這個問題。爲什麼chrome不請求更新版本的緩存文件?

如果我打開devtools(網絡標籤)打開的頁面,違規文件通常顯示HTTP 200響應,但在「大小」列中顯示「(來自緩存)」。在標題詳細信息中顯示「臨時標題顯示」。 Wireshark顯示文件確實沒有從服務器請求。

Chrome顯示文件的最後修改日期爲星期六,2014年12月6日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瀏覽器/ Safari瀏覽器39.0.2171.71/537.36」)

編輯: 這個問題似乎是最反感與由Require.js加載的文件,雖然我已經遇到它與JavaScript中直接引用的JavaScript以及。

我在這裏錯過了什麼?爲什麼不會檢查文件的新版本?

回答

2

事實證明,當服務器響應中未指定Cache-Control頭時(至少在沒有指定緩存行爲時),瀏覽器在緩存方面的記錄行爲很差。一般來說,在這種情況下,瀏覽器根據文件的最後修改日期(如果在響應中聲明),當前日期以及當前日期來確定要緩存項目的時間長度。

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

可悲的是,谷歌對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?