2015-01-21 78 views
0

在我的IIS服務器上,我有一個json文件,它在一天和5分鐘之間以可變頻率進行更新。jQuery/AJAX/Chrome/IIS:如何強制高速緩存重新驗證(304)?

第一次的負載給了我200預期與所有正確的標題。第二次加載等返回304未修改,也如預期的那樣。當文件被更改時,我得到一個200和IIS重新上傳文件,全部按照計劃。

樣品200響應:

Accept-Ranges:bytes 
Content-Encoding:gzip 
Content-Type:application/json 
Date:Tue, 20 Jan 2015 23:05:06 GMT 
ETag:"604a75cb335d01:0" 
Last-Modified:Tue, 20 Jan 2015 22:52:40 GMT 
Server:Microsoft-IIS/7.5 
Transfer-Encoding:chunked 
Vary:Accept-Encoding 
X-Powered-By:ASP.NET 

樣品304響應:

Accept-Ranges:bytes 
Date:Tue, 20 Jan 2015 23:07:20 GMT 
ETag:"604a75cb335d01:0" 
Last-Modified:Tue, 20 Jan 2015 22:52:40 GMT 
Server:Microsoft-IIS/7.5 
X-Powered-By:ASP.NET 

問題

後4-6負載左右,我開始變得200 OK (from cache)沒有文件傳輸(只需從緩存中獲取文件),並從Chrome獲取以下請求頭文件: Bad headers

Chrome未向服務器發送請求,因此沒有收到預期的304(或200 w /新的文件下載)。

嘗試

我不能使用cache: false,因爲這不會觸發,我想,如果該文件尚未更新到出現304。

我嘗試使用ifModified: true這讓我得到我想要的304,但success()函數接收undefined作爲數據。

這是Ajax調用我使用:

$.ajax({ 
    url: "currentData.json", 
    //cache: false, // Not using this because I'll never get 304 
    //ifModified: true, // Doesn't populate data in success() 
    success: function (data) {console.log(data);} 
}); 

回答

1

如果沒有高速緩存控制指令,瀏覽器自由地做它爲所欲爲。由於您的內容不會經常更換超過5分鐘,這應該足以補充:

Cache-Control: max-age=300 

你的頭。在下一頁加載時,如果超過300秒,它將再次使用If-Modified-Since標題進行檢查。

對於IIS中的靜態文件,看起來這可以使用IIS7 Cache-Control