簡體   English   中英

Cache-control中no-cache和no-store有什么區別?

[英]What is the difference between no-cache and no-store in Cache-control?

我沒有發現Cache-Control:no-storeCache-Control:no-cache之間的實際區別。

據我所知, no-store意味着不允許緩存設備緩存該響應。 另一方面, no-cache意味着不允許任何緩存設備在不首先使用源驗證緩存響應的情況下提供緩存響應。 但這種驗證是關於什么的? 有條件搞定?

如果響應有no-cache ,但沒有Last-ModifiedETag怎么辦?

問候。

但那檢查是什么?

正確檢查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. 

正如您所指出的,no-cache並不意味着永遠不會緩存,而是用戶代理必須始終詢問服務器是否可以使用緩存的內容。 相比之下,沒有商店說甚至不保留副本,這意味着沒有什么可以問的。 如果你知道答案“我可以重復使用嗎?” 永遠不行,您可以通過跳過緩存驗證並在緩存中為其他數據節省空間來提升性能。

除了性能之外, 瀏覽器歷史記錄還存在行為差異。 HTTP 1.1第13.13節說“過期時間不適用於歷史機制”。 no-cache標頭描述了到期,因此不適用於歷史機制,例如后退按鈕。 因此,用戶可以在沒有聯系服務器的情況下向后導航到沒有高速緩存的前一頁。

另一方面,no-store標頭阻止數據存儲在會話之外,在這種情況下,它根本不可用於歷史機制。 如果用戶沒有存儲,如果用戶通過導航到另一個域結束其會話然后返回,則瀏覽器知道要顯示的內容的唯一方法是從服務器再次獲取初始頁面。

以下是關於此主題的Chromium問題如何區分:

no-cache並不意味着“不要緩存這個”(這將是無商店)。 no-cache意味着不要將此用於正常負載,除非為新鮮度重新驗證資源。 歷史導航不是正常負載。

  • No-store:客戶端不會做任何緩存操作。
  • 無緩存:客戶端將緩存響應,但客戶端將在使用該緩存數據之前檢查服務器:“服務器上的數據是否已更改?”:借助“If-Modified-Since”或“If-None-Match” ' 標題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM