天天看點

HTTP 頭部字段 Cache Control max-age = 0 和 no-cache 的差別

禁掉緩存的情況:請求百度首頁

HTTP 頭部字段 Cache Control max-age = 0 和 no-cache 的差別

開啟緩存的情況下:

HTTP 頭部字段 Cache Control max-age = 0 和 no-cache 的差別

似乎沒有什麼變化。

再觀察請求的頭部字段:cache-control: max-age=0

HTTP 頭部字段 Cache Control max-age = 0 和 no-cache 的差別

标頭 Cache-Control: max-age=0 暗示内容立即被認為是陳舊的(并且必須重新擷取),這實際上與 Cache-Control: no-cache 相同。

首先了解 cache-control 的幾種可能的值:

no-cache: 這會訓示浏覽器每次使用 URL 的緩存版本之前都必須與伺服器重新驗證。

no-store: 這會訓示浏覽器和其他中間緩存(如 CDN)從不存儲檔案的任何版本。

private: 浏覽器可以緩存檔案,但中間緩存( for example CDN cache)不能。

public: 響應可以由任何緩存存儲。

Cache-Control 标頭有兩個方面。 一側是它可以由網絡伺服器(又名“原始伺服器”)發送的地方。 另一端是浏覽器可以發送的地方(又名“使用者代理”)。

When sent by the origin server

我相信 max-age=0 隻是告訴緩存(和使用者代理)響應從一開始就已經過時,是以他們應該 (SHOULD) 在使用緩存副本之前重新驗證響應(例如,使用 If-Not-Modified 标頭).

而 no-cache 告訴他們在使用緩存副本之前必須 (MUST) 重新驗證。

NO-CACHE 的含義:

緩存不得在沒有與源伺服器成功重新驗證的前提下,直接使用響應來滿足後續請求。這允許源伺服器阻止緩存,即使緩存已配置為向用戶端請求傳回陳舊的響應。

When sent by the user agent

如果使用者代理使用 Cache-Control: max-age=0(又名“端到端重新驗證”)發送請求,那麼沿途的每個緩存都将重新驗證其緩存條目(例如,使用 If-Not-Modified header)一直到源伺服器。 如果回複是 304(未修改),則可以使用緩存的實體。

另一方面,使用 Cache-Control: no-cache(又名“端到端重新加載”)發送請求不會重新驗證,并且伺服器在響應時不得使用緩存副本