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的原創文章,盡在:"汪子熙":


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM