Proxy
HTTP 記憶體標頭:必須重新驗證應該如何工作?
使用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 並解釋記憶體如何處理特定的響應指令。