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 使用包括机器学习在内的高级自动化技术来缓存动态生成的内容和资源。这会优化您的缓存策略并进一步加快内容交付。