1. 程式人生 > 其它 >HTTP 頭部欄位 Cache Control max-age = 0 和 no-cache 的區別

HTTP 頭部欄位 Cache Control max-age = 0 和 no-cache 的區別

禁掉快取的情況:請求百度首頁

開啟快取的情況下:

似乎沒有什麼變化。

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

標頭 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(又名“端到端重新載入”)傳送請求不會重新驗證,並且伺服器在響應時不得使用快取副本。

更多Jerry的原創文章,盡在:"汪子熙":