Cache-control 是一個 HTTP 標頭,用于??在客戶端請求和服務器響應中指定瀏覽器緩存策略。策略包括資源的緩存方式、緩存位置以及過期前的最長期限(即?time to live)。
緩存控制標頭被分解為指令,其中最常見的指令詳述如下:

來自 google.com 的 HTTP 響應標頭示例
緩存控制:最大年齡
max-age 請求指令以秒為單位定義資源的緩存副本過期所需的時間量。過期后,瀏覽器必須通過向服務器發送另一個請求來刷新其資源版本。例如,?cache-control: max-age=120?表示返回的資源有效期為 120 秒,之后瀏覽器必須請求更新的版本。
緩存控制:無緩存
no-cache 指令意味著瀏覽器可以緩存響應,但必須首先向?源服務器提交驗證請求。
緩存控制:無存儲
no-store 指令意味著瀏覽器不允許緩存響應并且必須在每次請求時從服務器中提取它。此設置通常用于敏感數據,例如個人銀行詳細信息。
緩存控制:公共
公共響應指令指示資源可以由任何緩存緩存。
緩存控制:私有
私有響應指令表明資源是用戶特定的——它仍然可以被緩存,但只能在客戶端設備上。例如,標記為私有的網頁響應可以由桌面瀏覽器緩存,但不能由內容分發網絡 (CDN) 緩存。
額外的 HTTP 緩存標頭
除了緩存控制之外,值得注意的 HTTP 緩存標頭包括:
- Expires??– 此標頭指定緩存資源到期的固定日期/時間。例如,?Expires: Sat, 13 May 2017 07:00:00 GMT?表示緩存資源將于格林威治標準時間 2017 年 5 月 13 日早上 7 點過期。當存在包含 max-age 指令的緩存控制標頭時,將忽略 expires 標頭。
- ETag??– 一種響應標頭,根據令牌(例如,引號中的字符串)標識所提供內容的版本,該令牌?"675af34563dc-tr34"?在資源修改后發生變化。如果在發出請求之前令牌未更改,瀏覽器將繼續使用其本地版本。
- Vary??– 一個標頭,用于確定必須與緩存資源匹配才能被視為有效的響應。例如,標頭?Vary: Accept-Language, User-Agent?指定每個用戶代理和語言的組合都必須存在一個緩存版本。
CDN 和緩存控制
緩存標頭的多樣性會使手動緩存管理不堪重負。CDN 允許通過用戶友好的儀表板進行精細的緩存策略管理,從而使您無需手動調整各個標頭。
除了簡化緩存管理之外,CDN 還使用代理增強了瀏覽器緩存過程。代理緩存使內容更接近站點訪問者,加速本地存儲資源的交付。這對于瀏覽器尚未緩存站點內容的初次訪問者尤其有益。
最后,更高級的 CDN 使用包括機器學習在內的高級自動化技術來緩存動態生成的內容和資源。這會優化您的緩存策略并進一步加快內容交付。