禁掉緩存的情況:請求百度首頁
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5iYxYjNjJzM1UTOzYGNwEmYiRDO0MTMiZTO2ITO5IWY58CX5d2bs92Yl1iclB3bsVmdlR2LcNWaw9CXt92Yu4GZjlGbh5yYjV3Lc9CX6MHc0RHaiojIsJye.png)
開啟緩存的情況下:
似乎沒有什麼變化。
再觀察請求的頭部字段: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(又名“端到端重新加載”)發送請求不會重新驗證,并且伺服器在響應時不得使用緩存副本