2011-09-27 35 views
13

我沒有找到Cache-Control:no-storeCache-Control:no-cache之間的實際區別。緩存控制中的no-cache和no-store之間有什麼區別?

據我所知,no-store意味着沒有緩存設備被允許緩存該響應。另一方面,no-cache意味着不允許緩存設備爲緩存響應提供服務,而不首先對其進行驗證。但是,關於什麼是驗證?有條件的獲得?

如果響應有no-cache,但它沒有Last-ModifiedETag

問候。

回答

12

但這是什麼檢查?

正確檢查Last-ModifiedETag。客戶端會詢問服務器是否有使用這些頭部的新版本數據,如果答案是否定的,它將提供緩存數據。


更新

RFC

no-cache 
    If the no-cache directive does not specify a field-name, then a cache MUST NOT use 
the response to satisfy a subsequent request without successful revalidation with the 
origin server. This allows an origin server to prevent caching even by caches that 
have been configured to return stale responses to client requests. 
+0

如果緩存的響應沒有'Last-Modified'和'ETag'? – vtortola

+0

我認爲在這種情況下,響應不會被緩存。 –

+0

這就是我解釋RFC的方式。 (增加片段) –

2

當你確定,不-cache並不意味着永遠不會緩存,而是用戶代理必須始終詢問服務器是否可以使用緩存。相反,沒有商店的人甚至沒有保留副本,這意味着沒有什麼可問的。如果您知道「我可以重複使用這個嗎?」的答案嗎? (1)跳過詢問的開銷並且(2)不拋棄某些可能可重複使用的存儲結果,爲新的不可重複使用的結果騰出空間,從而獲得性能提升。

除了表現,與瀏覽器歷史記錄有一個行爲差異。 HTTP 1.1規範部分13.13表示「到期時間不適用於歷史機制。」 no-cache頭文件描述了過期,因此不適用於歷史機制,例如後退按鈕。因此,用戶可以在沒有服務器聯繫的情況下使用no-cache向後導航到前一頁。

另一方面,無存儲標頭可防止數據被存儲在會話之外,在這種情況下,它不能用於歷史記錄機制。在沒有商店的情況下,如果用戶通過導航到另一個域然後返回來結束他的會話,則瀏覽器知道要顯示的內容的唯一方法是從服務器再次獲取初始頁面。

下面是關於該主題的Chromium issue如何使區別:

無緩存並不意味着「不緩存此」(這將是無店)。 no-cache意味着不要將其用於正常負載,除非資源被重新驗證以實現新鮮度。歷史導航不是正常的負載。

相關問題