Cache-Control 标头是一个 HTTP 标头字段,允许服务器为客户端(如 Web 浏览器)和中间缓存(如代理服务器)指定缓存指令。它控制客户端和缓存应如何存储和重用对后续请求的响应。它还提供了一种控制缓存各方面的方式,包括缓存生命周期、缓存验证和缓存重新验证。

了解更多:Mozilla Cache-Control 文档 💡

如果 传递多个指令,每个指令以 逗号(,)分隔。如果指令 带参数,参数跟在指令后,以 等号(=)分隔,例如 max-age=86400

Cache-Control 标头可以在 .htaccess 文件或 PHP 代码 中自定义。

指令类型

指令可分为 四组:可缓存性、过期、重新验证和其他。

可缓存性

资源是否应进入缓存,以下指令表示资源的可缓存性:

  • public — 表示任何缓存都可以存储响应,即使响应通常不可缓存或仅在私有缓存中可缓存
  • private — 表示响应消息面向单个用户(例如浏览器缓存),共享缓存(CDN 或企业代理)不得存储
  • no-store — 表示任何缓存(即客户端或代理缓存)不得存储即时请求或响应的任何部分

过期

资源应在缓存中保留多长时间,以下指令影响资源在缓存中的保留时长:

  • max-age=seconds — 表示当响应的年龄大于指定秒数时即为过期
  • 年龄定义为资源从源服务器提供以来的秒数
  • seconds 参数为不带引号的整数
  • s-maxage=seconds — 表示在共享缓存中,此指令指定的最大年龄会覆盖 max-age 指令或 Expires 标头字段指定的最大年龄
  • s-maxage 指令也暗示 proxy-revalidate 响应指令的语义
  • 浏览器忽略 s-maxage
  • no-cache — 表示在没有在源服务器上成功验证的情况下,响应不能用于满足后续请求;这允许源服务器阻止缓存使用源来满足请求,即使是配置了发送过期响应的缓存

确保 HTTP Expires 标头在源服务器上设置为 格林威治标准时间(GMT),如 RFC 2616 所规定 💡

重新验证

缓存应何时以及如何与服务器重新验证缓存响应,以确保其仍然有效和最新。

此类指令的一个例子是 must-revalidate 指令。当包含在 Cache-Control 标头中时,它指示缓存对每个后续请求都与服务器重新验证缓存响应,即使根据 max-age 指令指定的过期时间该响应被认为是新鲜的。这确保缓存只提供最新的响应,并有助于维护数据完整性。

其他

此组包括控制缓存各方面的附加指令,例如强制缓存重新验证响应、防止在缓存中存储响应,或要求使用条件请求进行验证。

来源:Hostinger 官方帮助文档