Apache-2.2
記憶體控制最大年齡問題
我試圖從下面了解 Cache-Control: max-age=0 配置:
這是點擊刷新後我們登陸頁面上的靜態圖像的 HTTP Live Headers 片段:
If-Modified-Since: Sat, 23 Jul 2011 02:05:28 GMT If-None-Match: "21246-eb05-4a8b30415ea00" **Cache-Control: max-age=0** HTTP/1.1 304 Not Modified Date: Tue, 06 Sep 2011 20:59:29 GMT Server: IBM_HTTP_Server Connection: Keep-Alive Keep-Alive: timeout=6 Etag: "21246-eb05-4a8b30415ea00"
我看到我們的
Cache-Control
節目了max-age=0
。我找到了這個解釋:記憶體控制:max-age
這是 HTTP 1.1 中 HTTP 1.0 中可用的早期 Expires 標頭的等效項。它隱含地告訴瀏覽器它可以記憶體頁面,但如果超過 max-age 則必須與伺服器重新驗證。將 max-age 設置為零可確保頁面永遠不會從記憶體中提供,而是始終針對伺服器重新驗證。
如果這是正確的,我們永遠不應該從瀏覽器記憶體中提取圖像,如果你看
304
上面的內容是不正確的?max-age=0
真正的意思是什麼?我們沒有在 Apache httpd.conf 中手動配置任何記憶體配置,因此我假設我們正在使用記憶體/etags 的預設值。
關鍵在於您發布的解釋的最後一句:
將 max-age 設置為零可確保頁面永遠不會從記憶體中提供,而是始終針對伺服器重新驗證。
在您粘貼的範例中,客戶端已經在其記憶體中擁有資產,它可以提供服務。然而,由於 max-age 客戶端將首先聯繫伺服器並詢問它是否已被修改。從您粘貼的伺服器響應來看,資產沒有改變,伺服器正確地“重新驗證”(304)客戶端版本是否正確(實際上不必通過線路運送資產,所以有一些益處)。
如果 max-age 更高,則瀏覽器可以從記憶體中向上提供資產,而無需向伺服器詢問任何內容。