Apache-2.2

記憶體控制最大年齡問題

  • September 7, 2011

我試圖從下面了解 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 更高,則瀏覽器可以從記憶體中向上提供資產,而無需向伺服器詢問任何內容。

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