Cache-Control 头生成器

用简单的开关和人性化的时间单位,在你的浏览器中直接构建正确的 HTTP Cache-Control 响应头。

你的 Cache-Control 头是根据你选择的选项在浏览器本地组装的,你配置的任何内容都不会被上传或存储在服务器上。

在配置服务器?试试 nginx 配置生成器。

关于 Cache-Control 头生成器

这款 Cache-Control 头生成器把一套令人困惑的 HTTP 缓存指令变成几个简单的开关。切换 public 或 private、no-store、no-cache、must-revalidate、proxy-revalidate 或 immutable,并用小时、天、年这样的人性化单位来设置 max-age、s-maxage、stale-while-revalidate、stale-if-error 等生命周期,而不必去数秒数。当你更改选项时,工具会按规范顺序组合各指令,用通俗英语准确解释当前的头做了什么,并标记像 no-store 与 max-age 同时出现这样自相矛盾的组合。预设涵盖日常场景:一年 immutable 的静态资源、始终重新验证的 HTML、绝不存储的私有数据,以及 CDN 与浏览器分开的策略。可复制原始头,或现成的 nginx、Apache 和 HTML meta 代码片段。一切都在你的设备上、在浏览器中运行。

功能特性

如何使用 Cache-Control 头生成器

  1. 选择一个预设,或从零开始并选择 public 或 private。
  2. 切换你需要的指令,例如 no-cache、must-revalidate 或 immutable。
  3. 用一个数字加一个单位(小时、天、年)输入 max-age 等生命周期。
  4. 阅读生成的头值以及它下方的通俗英语解释。
  5. 复制原始头,或你需要的 nginx、Apache 或 HTML meta 代码片段。

示例

输入

public + immutable + max-age = 1 year

输出

Cache-Control: public, max-age=31536000, immutable

经典的带指纹静态资源策略:缓存一年,绝不重新验证。

常见错误与故障排除

常见问题

no-cache 和 no-store 有什么区别?
no-store 意味着响应绝不能被写入任何缓存,因此每次请求都回到源站。no-cache 确实允许存储响应,但缓存必须先向源站重新验证它才能再次提供。no-store 关乎不保留副本;no-cache 关乎总是检查保留的副本是否仍然是最新的。
immutable 在 Cache-Control 头中有什么作用?
immutable 告诉浏览器:在其 max-age 生命周期内该资源永远不会改变,因此即使用户点击刷新,它也可以跳过重新验证。它适用于像 app.9f2c.js 这样带版本或指纹的文件,新构建会在新 URL 下发布,而不是覆盖旧文件。
max-age 和 s-maxage 有何不同?
max-age 设置响应在任何缓存(包括浏览器)中保持新鲜的时长。s-maxage 会覆盖 max-age,但仅对 CDN 和代理等共享缓存生效。两者都设置时,可让响应在浏览器中短暂缓存,同时在 CDN 上保留更久。
我应该在什么时候用 public 还是 private?
public 让 CDN 和代理等共享缓存连同浏览器一起存储该响应。private 把存储限制在单个用户的浏览器中,这对于个性化或需要认证、绝不能从共享缓存提供给其他用户的响应是正确的选择。
stale-while-revalidate 有什么作用?
stale-while-revalidate 让缓存在后台获取新副本的同时,立即提供一个稍微过期的响应。用户得到即时响应,缓存则为下一次请求自我更新,从而平滑地过渡资源过期的那一刻。
我的配置会被发送到服务器吗?
不会。头、解释和代码片段都在你切换选项时于你的浏览器中组装,因此配置在你的设备上本地处理,不会有任何内容被上传。

相关工具

全部 ArrayKit 工具