2011-09-27 83 views
6

我有一個這個標題混亂,我已經讀Cache-Control:must-revalidate責任在提供緩存項目之前驗證所有的請求與源代碼,但只是陳舊的?或者不管是陳舊還是新鮮?我在不同的地方看過這兩樣東西。緩存控制:必須重新驗證是否需要驗證所有請求,或只是過時的?

Cache-Control:no-cache有什麼區別?因爲這些標題看起來相當於我。

更新1:我從書上讀到這樣的:

Cache-Control: must-revalidate響應頭告訴緩存 繞過新鮮度計算機制,並重新驗證每個 訪問

@Peter O.已經指出了RFC的說法。所以那本舊書是錯誤的。

更新2:在這個教程:http://www.mnot.net/cache_docs/

no-cache - 強制高速緩存將請求提交到源服務器 進行驗證釋放緩存副本之前,每一次。這是 用於確保身份驗證得到尊重(與公共組織 結合使用),或者保持嚴格的新鮮度,同時不犧牲緩存的所有優點。

must-revalidate - 告訴緩存他們必須 服從您給他們關於表示的任何新鮮度信息。 HTTP允許緩存在特殊的 條件下提供陳舊的陳述;通過指定這個標題,你告訴緩存你想要它嚴格遵循你的規則。

回答

10

科HTTP的14.9.4/1.1:

當必備revalidate指令是存在於由 高速緩存接收到響應 ,該高速緩存必須不變得 陳舊後使用條目 以響應後續請求而無需首先重新驗證它 與 原始服務器

節HTTP/1.1 14.8:

如果響應包括「必須重新驗證」緩存控制 指令,高速緩存可以使用在回答一個 後續請求該響應。但是如果響應是陳舊,所有的緩存 必須首先與原始服務器重新驗證...

因此看來,如果 must-revalidate只接收到過期響應必須進行重新驗證。

no-cache,見14.9.1:

如果no-cache指令未指定字段名[這是 的情況下 這裏],然後緩存不得使用響應爲了滿足沒有與源服務器成功重新驗證一個 隨後 請求......

因此,no-cache既適用於新鮮和陳舊的響應。

編輯:

這句話可能與此有關(第13.3節):

當緩存有一個陳舊的條目,它希望作爲響應 到客戶端的請求中使用,它首先必須檢查與原始服務器 (或可能與新鮮響應的中間緩存)以查看是否 其緩存的條目仍然是可用的。

所以,must-revalidate是當緩存中間 緩存可能是相關的,因爲否則的緩存可以檢查一個 新鮮響應的中間緩存,而不是直接檢查源服務器。

+0

感謝。我已經更新了什麼,我在書上讀到,因爲我不能把它放在一個留言的訊息,那就是對你的RFC發現了什麼。你怎麼看? – vtortola

+0

確定這本書是錯誤的。在這本書的新版本中,它說明了你所說的話。謝謝! – vtortola

+2

我還是很困惑。我想緩存我的資源,除非資源更新到我的服務器上的更新版本。我讀過無緩存的目的是爲這一點,但一些瀏覽器把它作爲無店鋪來代替。那麼現在我將如何實現這種行爲?我可以使用必須重新驗證嗎? –

相關問題