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 代码片段。一切都在你的设备上、在浏览器中运行。
功能特性
- public、private、no-store、no-cache、must-revalidate、proxy-revalidate 和 immutable 的开关
- 为 max-age、s-maxage、stale-while-revalidate 和 stale-if-error 提供人性化时间输入(秒到年)
- 在你编辑时按干净的规范顺序组合各指令
- 用通俗英语准确解释当前的头做了什么
- 强制执行互斥规则,并对自相矛盾的组合发出警告
- 为静态资源、始终重新验证的 HTML、私有数据以及 CDN/浏览器分开缓存提供一键预设
- 为原始头、nginx add_header、Apache Header set 和 HTML meta 标签提供可直接复制的代码片段
- 完全在你的浏览器中运行,因此你配置的任何内容都不会离开你的设备
如何使用 Cache-Control 头生成器
- 选择一个预设,或从零开始并选择 public 或 private。
- 切换你需要的指令,例如 no-cache、must-revalidate 或 immutable。
- 用一个数字加一个单位(小时、天、年)输入 max-age 等生命周期。
- 阅读生成的头值以及它下方的通俗英语解释。
- 复制原始头,或你需要的 nginx、Apache 或 HTML meta 代码片段。
示例
输入
public + immutable + max-age = 1 year
输出
Cache-Control: public, max-age=31536000, immutable
经典的带指纹静态资源策略:缓存一年,绝不重新验证。
常见错误与故障排除
- 你设置了 no-store,但又添加了 max-age 或 immutable,它们却消失了。 — no-store 意味着任何内容都绝不会被缓存,因此它覆盖所有其他指令。如果你确实想要一个被缓存但受控的响应,请关闭 no-store。
- immutable 似乎没有效果。 — immutable 只在响应仍然新鲜时才起作用,因此要把它与非零的 max-age 搭配。没有 max-age 就没有它可以应用的新鲜窗口。
- 当头为 private 时,你的 CDN 忽略了 s-maxage。 — private 禁止共享缓存存储该响应,因此只针对共享缓存的 s-maxage 永远不会生效。如果你想让 CDN 缓存它,请使用 public。
- 带有较长 max-age 的 no-cache 表现得像没被缓存一样。 — no-cache 会在每次重用前强制向源站重新验证,这实际上抵消了 max-age 授予的新鲜度。请根据你的目标去掉两者之一。
常见问题
- 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 工具