2014-07-16 64 views
6

我是瀏覽器緩存的新手。我試圖讓Chrome瀏覽器使用查詢參數永久緩存任何靜態文件(用於緩存清除目的)。我已經將Cache-Control和Expires頭文件設置爲未來,這應該足以說「永遠緩存」。由此產生的響應標頭:Chrome拒絕緩存Javascript

 
HTTP/1.1 200 OK 
Cache-Control: public, max-age=315360000 
Connection: keep-alive 
Content-Encoding: gzip 
Content-Type: application/x-javascript 
Date: Wed, 16 Jul 2014 09:29:54 GMT 
Last-Modified: Wed, 16 Jul 2014 03:44:14 GMT 
Server: nginx/1.6.0 
Transfer-Encoding: chunked 
Vary: Accept-Encoding 

Firefox和Safari似乎尊重所有cachebusted(?v =查詢參數)文件。 Chrome主要遵循指令,除了Javascript。大多數情況下,它使用If-Modified-Since標頭執行請求,而不是從緩存中加載。有時候,其中一個會從緩存中加載,另一個會產生一個導致304的請求。通常,當從新選項卡加載頁面時,它將從緩存中加載,但如果在地址欄中輸入,則不會。

Debugger

我使用的是什麼,我認爲是完全一樣的頭觀察到其他網站,並且這些文件總是從緩存中加載。即使您進行刷新,其中一些緩存也會從緩存中加載。

我知道緩存行爲有點不可預知,但我想確保我不會監督讓Chrome瀏覽器執行此操作的內容。

回答

1

我有同樣的問題與鉻和反覆試驗的幾個小時我figuered出來後,即鉻似乎與Vary標頭

我在我的Apache /的.htaccess得到這個片斷的一個問題配置並儘快我的評論「標題附加因人而異的Accept-Encoding」啓動Chrome緩存的.js和.css文件

<FilesMatch "(\.js\.gz|\.css\.gz)$"> 
    # Serve correct encoding type. 
    Header set Content-Encoding gzip 
    # Force proxies to cache gzipped & non-gzipped css/js files separately. 
    #Header append Vary Accept-Encoding 
</FilesMatch> 

它仍在運行,通過我們的nignx服務器的請求,而不能正常工作的路線,因爲它是添加Vary:Accept-Encoding標頭時,在傳遞gzip壓縮時。

到目前爲止,我可以猜測這是一個問題,只發生在鉻和作爲解決方法我會改變配置附加頭只有當鉻(沒有檢查Safari)不是客戶端,直到有一個更好的修復方法:

<FilesMatch "(\.js\.gz|\.css\.gz)$"> 
    # Serve correct encoding type. 
    Header set Content-Encoding gzip 
    # Force proxies to cache gzipped & non-gzipped css/js files separately. 
    BrowserMatch "Chrome" ChromeFound 
    Header append Vary Accept-Encoding env=!ChromeFound 
</FilesMatch>