跳转到内容
无痕工具库 无痕工具库

Hostinger 高级 CDN 请求头管理详解

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

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

如果同时传递多个指令,每个指令之间用逗号( , )分隔。如果指令带有参数,参数紧跟在指令后面,并用等号( = )分隔,例如 max-age=86400。

Cache-Control 响应头可以在 .htaccess 文件中自定义,也可以通过 PHP 代码 进行设置。

指令的类型

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

可缓存性

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

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

过期

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

  • max-age=seconds — 表示当资源的存活时间(age)超过指定的秒数值后,该响应即过期

    • 存活时间定义为自资源从源站服务器发出以来经过的秒数
    • seconds 参数是一个不带引号的整数
  • s-maxage=seconds — 表示在共享缓存中,此指令指定的最大存活时间会覆盖由 max-age 指令或 Expires 头字段指定的最大存活时间

    • s-maxage 指令还隐含了 proxy-revalidate 响应指令的语义
    • 浏览器会忽略 s-maxage
  • no-cache — 表示在源站服务器成功验证之前,该响应不能用于满足后续请求;这允许源站服务器防止缓存在未与源站服务器联系的情况下,直接使用缓存响应来满足请求,即使该缓存已被配置为可发送过期响应

请确保在源站服务器上设置的 HTTP Expires 头使用格林尼治标准时间(GMT),如 RFC 2616Open external link 所规定 💡

重新验证

它指的是缓存应如何以及何时与服务器重新验证已缓存的响应,以确保该响应仍然有效且是最新的。

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

其他

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