Proxy

HTTP 記憶體標頭:必須重新驗證應該如何工作?

  • May 13, 2011

使用trac,我收到帶有以下標頭的響應:

Cache-control: must-revalidate

此外,沒有發送“過期”標頭。然而,我們的本地代理正在記憶體這些響應,因此在進行編輯時,頁面需要“硬刷新”才能更新。代理是否行為不端?其他可能相關的標題:

Connection          Keep-Alive
Proxy-Connection    Keep-Alive
Keep-Alive          timeout=15, max=100

HTTP 允許記憶體響應,即使它們沒有明確的 Expires 或 Cache-Control 標頭。

具體來說,他們可以計算自己所謂的啟發式新鮮度,以獲取具有特定 HTTP 狀態程式碼(包括200 OK)的響應。通常,這是基於Last-Modified標頭的值;例如,如果 LM 是 1 天前第一次儲存響應時,記憶體可能會認為假設它是 2 小時是新鮮的是安全的。

must-revalidate是一條指令,它告訴記憶體一旦某些東西變得陳舊,就必須在源伺服器上對其進行檢查。如果它不存在,記憶體可以(通常)在不尋常的情況下使用陳舊的響應(例如,如果它們與原始伺服器失去聯繫)。

所以,不,這個記憶體看起來不像是行為不端,儘管聽起來它在計算啟發式新鮮度時可能有點激進。如果您根本不希望記憶體儲存響應,請嘗試Cache-Control: no-store,或者(最好)設置一個顯式max-age來控制它被認為是新鮮的多長時間。

您可能有興趣查看 IETF HTTPbis 工作組目前包含記憶體的文件:

https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-p6-cache

希望這比 RFC2616 更清楚一些。

此外,http://redbot.org/將檢查 URL 並解釋記憶體如何處理特定的響應指令。

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