Proxy

代理如何處理 ETag?

  • March 11, 2020

我使用 ETags 來提高性能。我決定使用在伺服器、客戶端和代理上有效的 Etag。

但是,如果代理保存了 ETag,如何處理呢?代理是否仍然詢問網站 ETag 是否有效,或者代理本身是否只是回答“我知道這個。不需要詢問伺服器?”

或者換句話說,如果啟用了 ETag-Caching on Proxy,以下場景是否仍然有效?

  1. 瀏覽器發出請求。返回一個 ETag “ABBA”
  2. 瀏覽器向伺服器發出另一個請求。ETag “ABBA” 被辨識,返回 304 2.1 瀏覽器使用本地記憶體
  3. 瀏覽器向伺服器發出另一個請求,發送 ETag “ABBA”。這一次伺服器決定數據已經改變,因此它返回一個帶有新 Etag 的新響應。

如果客戶端和伺服器之間有一個知道 ETag 的代理,它是否仍然詢問伺服器 Etag 是否有效,或者如果代理曾經知道該 etag,請求是否會在那裡結束?

代理伺服器的行為主要由後端伺服器設置的Cache-Control標頭控制。

只要資源沒有過期,代理就會從記憶體中提供它(包括所有相關的元數據,例如 ETag)。代理不需要聯繫伺服器來驗證原始內容,只要它允許將資源保留在記憶體中。

一旦 Cache-Control 標頭指示資源應從記憶體中過期或重新驗證,代理伺服器將再次聯繫伺服器以驗證原始資源。如果 ETag 在伺服器上沒有被修改,則不必再次下載,相同的對象(但具有更新的 Cache-Control 時間)可以保留在記憶體中。

這個資源可能很有趣。

引用自:https://serverfault.com/questions/772182