Cache-Control

GaoYanbing發表於2024-07-25
Cache-Control 是一個 HTTP 協議中關於快取的響應頭,它用於指定所有快取機制在整個請求/響應鏈中必須服從的指令。這些指令主要用於控制瀏覽器和其他中間快取如何快取和重新使用已快取的響應。Cache-Control 提供了比 Expires 頭部更精確和靈活的快取控制方式。
基本概念

定義:Cache-Control 是一個 HTTP 頭,用於控制瀏覽器和其他中間快取如何快取和重新使用已快取的響應。
位置:Cache-Control 可以在請求頭或響應頭中設定。
作用:指定請求和響應遵循的快取機制,包括何時、如何快取響應以及如何驗證快取的有效性。

常用指令

Cache-Control 的值是一組由逗號分隔的指令,以下是一些常見的指令及其說明:

指令 說明
public 所有內容都將被快取(客戶端和代理伺服器都可快取)。
private 內容只快取到私有快取中(僅客戶端可以快取,代理伺服器不可快取)。
no-cache 指示瀏覽器忽略資源快取副本,強制到伺服器獲取資源(但允許快取協商)。
no-store 禁止使用任何快取策略,客戶端每次請求都需要服務端給予最新的響應。
max-age=xxx 快取的內容將在 xxx 秒後失效,這個選項只在 HTTP 1.1 中可用。
must-revalidate 如果快取的內容失效,請求必須傳送到伺服器進行重新驗證。
proxy-revalidate 類似於 must-revalidate,但僅適用於共享快取(如代理伺服器)。
s-maxage=xxx 類似於 max-age,但專門為共享快取(如 CDN)設定,優先順序高於 max-age。
no-transform 告訴中間代理不要改變資源的格式。
工作原理

當瀏覽器或其他客戶端請求資源時,它會檢查 Cache-Control 頭部以確定是否可以從快取中獲取資源。如果 Cache-Control 指示資源是快取的,並且快取仍然有效(例如,max-age 指令指定的時間尚未過期),則客戶端將使用快取的響應而不是向伺服器傳送新的請求。如果快取已過期或 Cache-Control 指示不進行快取(如 no-store 或每次請求都需驗證的 no-cache),則客戶端將向伺服器傳送請求以獲取新的響應。
部署與配置

Cache-Control 響應頭可以部署在服務端(如 Apache、Nginx 等伺服器程式)或直接在程式碼中新增。透過合理配置 Cache-Control,可以顯著提高網站的訪問速度和效能,同時保護敏感資訊不被快取。
示例

一個響應頭可能包含如下的 Cache-Control 指令:

http

Cache-Control: public, max-age=3600

這意味著此響應可以被任何快取快取,並且是新鮮的,在接下來的 3600 秒(1 小時)內,客戶端可以直接從快取中獲取響應而無需向伺服器傳送請求。
結論

Cache-Control 是 HTTP 快取控制中最重要和靈活的機制之一。透過合理配置 Cache-Control 指令,可以有效地管理快取行為,提高網站效能並保護使用者隱私。