2011-03-16 50 views

回答

19

您可以聯合使用Expires標題,但不管其他兩個。它受到代理和瀏覽器緩存的全面支持。

郵票ETagLast-Modified之間的區別是更多的語義。 ETags對客戶不透明。它通常是一個校驗和。而Last-Modified頭可以由客戶端解釋。據瞭解,最後修改的時間戳線性工作。

如果瀏覽器請求使用If-Unmodified-Since的資源,那麼過去的各種時間戳可以匹配這樣的條件。如果您的頁面頻繁更改,則上次修改時間戳可能會有所幫助。另一方面,ETag方法導致每個資源保存最後一個指紋的客戶端。 (我不確定瀏覽器緩存是否記住多個ETags)。根據請求,只列出一個或幾個可能的If-None-Match令牌。這可能意味着更多的錯失。此外,您必須比較多個校驗和,而使用Last-Modified時間戳可以進行算術比較。

ETags的真正優勢是您可以可靠地比較指紋。最後修改的時間戳更加模糊,因爲它們不驗證實際頁面內容是否更改。

參見:

+0

所以基本上我們應該使用mod_expire over eTags? – Avinash 2011-03-16 07:23:15

+0

在大多數情況下:是的。 – mario 2011-03-16 07:27:19

+0

那麼當我們應該使用最後修改的標題? – Avinash 2011-03-16 08:02:51

29

ExpiresCache-Control是 「強緩存頭」

Last-ModifiedETag是 「弱緩存頭」

首先瀏覽器檢查Expires/Cache-Control以確定是否向服務器發出請求。

如果有提出請求,將HTTP請求發送Last-Modified/ETag。如果文檔的Etag值與此匹配,則服務器將發送304代碼而不是200,並且不發送內容。瀏覽器將從其緩存中加載內容。

我建議使用強緩存頭之一,具有弱緩存頭的一個沿。

+0

你發現任何文件支持「強弱」緩存行爲嗎?我找不到一個,我的客戶端瀏覽器現在實際上優先考慮上次修改過期,我不明白爲什麼。 – GMsoF 2015-08-20 02:15:13

+0

弱驗證器在RFC 2616中描述(https://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.3.3)第13.3.3節 – user2418306 2016-05-03 18:28:31

+1

RFC 2616指出「實體標籤通常「強有力的驗證器」,但該協議提供了一種機制來標記實體標籤爲「弱」。 – cquezel 2017-02-09 18:06:20