2012-04-03 65 views
3

當使用must-revalidate緩存HTML頁面時,這意味着瀏覽器必須檢查由Last-ModifiedEtag定義的任何更新。但問題是,在max-age之前,瀏覽器不會與網站建立任何連接來讀取HTTP頭(分析Last-ModifiedEtag)?如何用必須重新驗證來緩存HTML頁面?

如何強制瀏覽器在從緩存中加載頁面之前建立一個簡短的連接來讀取(至少)HTTP讀取器?

我不明白must-revalidate的用法!在max-age之前檢查更新不是它的責任嗎?因爲在達到max-age之後,瀏覽器將從網站讀取並且從不使用本地緩存。

回答

8

是的,您對must-revalidate的理解是錯誤的:它表示緩存在陳舊(即「過期」)時可能無法提供此內容,但在此之前必須重新驗證。是的,緩存(和瀏覽器)理論上可以設置爲服務頁面,即使它們是陳舊的,但標準說,他們應該警告用戶,如果他們這樣做。

要強制瀏覽器使用服務器重新檢查頁面,最簡單的解決方案是將max-age=0添加到Cache-Control標頭。這可以讓您的瀏覽器在其緩存中保留一份該頁面的副本,但可以根據需要通過發送Last-ModifiedETag的內容將其與服務器版本進行比較。

它曾經是,你可以添加no-cache,但作爲用戶一直期待這表現爲no-store,瀏覽器正逐漸對待他們一樣。

查看HTTP/1.1 RFC, section 14.9瞭解更多關於標題的信息。

+1

非常有用的信息和實用指南,但我不明白一件事。您說過「緩存可能不會在該內容過期時提供,但在此之前必須重新驗證」。無論如何,即使沒有「必須重新驗證」,緩存在過期時也不會被提供。 – Googlebot 2012-04-06 13:53:15

+2

如果您重讀了上述RFC中14.9.3的結尾,它指出不僅緩存可以配置爲提供陳舊的響應,客戶端(瀏覽器)可以使用'max-stale'來指示陳舊的響應正常。它也提到了一個'Warning'頭部必須被連接,但是。 – 2012-04-06 17:25:41

相關問題