2012-03-16 63 views
15

我使用谷歌Chrome和我注意到,每一次我做一個XHR請求時,我碰到下面的頭放在請求:的jQuery的XmlHttpRequest的Cache-Control被忽略

Cache-Control: no-cache 
Pragma: no-cache 

如果你讀的規範http://www.w3.org/TR/XMLHttpRequest/它說以下

如果用戶代理實現HTTP緩存應該尊重作者請求頭 緩存控制報頭(例如緩存控制: 無緩存繞過高速緩存)。除非最終用戶明確要求 這樣的行爲(例如通過重新加載頁面),否則它不能自動發送緩存控制或附件請求標頭。

嗯,我想以下幾點:

$.ajax(myUrl, { 
    type: 'get', 
    dataType: 'json' 
    cache: true, 
    headers: { 
     'Cache-Control': 'max-age=200' 
    } 
    }) 

正如你看到的,我明確地設置Cache-Control頭地讓我的資源的緩存副本的希望。好吧,Chrome似乎忽略了Cache-Control標頭。

發出XHR請求時是否可以不發送Cache-Control: no-cache標頭?

回答

46

這是一個愚蠢的錯誤。我將開發工具設置爲「禁用緩存」。這就是爲什麼它總是添加緩存控制標題。如果發生這種情況,請確保您確認該框未被選中。

勞爾

+1

是的,請注意Firebug在「Net」菜單中也有「禁用瀏覽器緩存」。我也被這一個咬了。 – harpo 2013-09-12 15:35:03

+0

我一直想弄清楚爲什麼本機提取()沒有從緩存中返回數據,即使服務器正確設置了緩存控制標題。謝謝你幫助糾正這個疏忽,這讓我很生氣。 – 2016-01-15 23:13:20

+0

我花了很長時間試圖追查下來。謝謝! – 2016-12-05 22:22:46

3

我剛測試過它,你的代碼工作正常,除了一個缺少逗號。

打開網絡選項卡,然後再嘗試這種在控制檯此頁上:

$.ajax('http://stackoverflow.com/', { 
    type: 'get', 
    dataType: 'json', 
    cache: true, 
    headers: { 
     'Cache-Control': 'max-age=123' 
    } 
}) 

檢查網絡選項卡再次,單擊您剛纔提出的要求,並點擊「標題」選項卡。您會看到該請求是通過您提供的Cache-Control標題發送的。

+0

對不起。這是我自己的錯。我應該檢查開發人員工具以確保我沒有禁用緩存。 – HaxElit 2012-03-26 14:19:39