📜  HTTP 标头 |缓存控制

📅  最后修改于: 2022-05-13 01:56:45.745000             🧑  作者: Mango

HTTP 标头 |缓存控制

Cache-Control 标头是一个通用标头,它指定服务器响应以及客户端请求的缓存策略。基本上,它提供了有关缓存特定资源的方式、缓存资源的位置以及在过期之前达到的最大年龄(即生存时间)的信息。

句法:

Cache-Control:  [, ]*

指令:此标头接受 15 条指令,所有以下描述:

  • Public:该指令表示响应可以不受任何限制地被任何缓存存储。如果响应是不可缓存的,它仍然可以被缓存。
  • Private:表示只有浏览器缓存才有资格存储响应。
  • no-cache:表示响应可以不受任何限制地被任何缓存存储,即使它是不可缓存的。这里需要满足的条件是存储的响应在使用前必须经过源服务器的验证。
  • no-store:表示响应不能被任何缓存存储。
  • max-age=表示资源保持新鲜并且可以被请求访问的最长时间。
  • s-maxage=该指令主要用于内容交付网络(CDN)的共享缓存。它会覆盖 max-age 指令并在存在时使标头过期。
  • max-stale[=]:表示客户端只接受过时的响应。以秒为单位的可选时间表示客户端将接受的最大陈旧限制。
  • min-fresh=表示在以秒为单位的指定持续时间内,客户端只接受新鲜的响应。
  • stale-while-revalidate=表示客户端将接受陈旧的响应,同时异步寻找新的响应。以秒为单位的时间表示客户端将接受陈旧响应的持续时间
  • stale-if-error=表示如果新鲜的检查失败,客户端将接受陈旧的响应。以秒为单位的时间表示客户端在初始到期后接受陈旧响应的持续时间。
  • must-revalidate:表示缓存在陈旧后无法使用其陈旧资源,而无需从源服务器对其进行验证。
  • proxy-revalidate:该指令类似于 must-revalidate。但是,它仅适用于共享缓存并且被私有缓存忽略。
  • 不可变:表示响应体在一段时间内保持不变。
  • no-transform:表示资源不能转换或修改为其他形式。
  • only-if-cached:表示客户端的响应不能使用网络。这意味着缓存可以使用存储的响应或 504 状态代码。

例子:

  • 对于防止缓存,可以使用以下响应标头:
    Cache-Control: no-store
  • 出于缓存静态资产的目的,可以使用以下响应标头:
    Cache-Control: public, max-age=604800, immutable
  • 对于要求重新验证,可以使用以下内容:
    Cache-Control: no-cache
    Cache-Control: no-cache, max-age=0
    Cache-Control: no-cache, max-age=0, stale-while-revalidate=300

支持的浏览器:下面列出了与HTTP Cache-Control 标头兼容的浏览器:

  • 谷歌浏览器
  • 边缘
  • 火狐
  • IE浏览器
  • 歌剧
  • 苹果浏览器