2011-05-08 62 views
1

如果我創建一個XMLHttpRequest並且瀏覽器緩存響應,它是否也會緩存HTTP響應頭?也就是說,下次我提出同樣的要求時,我會從response.getResponseHeader得到相同的值嗎?XMLHttpRequests是否緩存響應頭?

這是依賴於瀏覽器?

+0

你試過了嗎? – 2011-05-08 00:44:11

回答

0

標題不是被緩存或不被重用。由於請求被髮送,所以接收到標題並且只有在這個請求在高速緩存中有效時才能決定。新的標題已經被下載了,所以沒有必要重複使用舊標題。

只有響應主體被高速緩存。

你可以很容易地測試這個。向靜態資源(img或txt文件或其他)發出XHR請求,並檢查Date標題。

我不認爲它依賴於瀏覽器。瀏覽器緩存和重複使用HTTP標頭將會非常非常奇怪。

編輯
jQuery的增加(默認情況下,我認爲)反緩存參數GET請求(很討厭),這將排序的回答你的問題:什麼是緩存這樣。

+0

但是,所有的XHR都會向服務器發出實際的請求嗎?當您鏈接到緩存的圖像或樣式表時,有時瀏覽器會重新使用它,甚至無需與服務器通話。這在XHRs中不會發生嗎? – 2011-05-08 01:50:44

+0

如果您專門提出請求,瀏覽器將提出該請求。使用圖片和樣式表,您不需要特別提出該請求。如果你想絕對100%確定,你可以添加一個像jQuery一樣的無緩存參數:'page.html?_ = 324832475934' – Rudie 2011-05-08 10:04:35

1

我敢肯定,至少主要的瀏覽器不會試圖緩存標題。但是,如果您想完全防止緩存,則可能需要發送特殊標題。如果你想要做緩存行爲的快速測試,這裏有一個頁面:

http://www.mnot.net/javascript/xmlhttprequest/cache.html

而且我建議,如果你想看到什麼實際發生的事情,你去得到一個數據包嗅探器,如Wireshark的,看看爲自己。我可以想象瀏覽器至少對XmlHttpRequest執行HEAD請求,即使它給你緩存的主體,但我可能是錯的。

+0

你沒有錯。甚至需要標頭才能知道緩存仍然有效。 – Rudie 2011-05-08 00:54:18