HTTP缓存控制头构建器
从可缓存性、新鲜度和重新验证指令组装有效的HTTP Cache-Control响应头——选择上下文预设或单独切换指令,提供每个指令的简明英文解释和矛盾或部分冗余组合(如将no-store与max-age配对)的警告。
输入
选择常见上下文以填充精选的指令组合,或保留为自定义以手动切换指令。
可缓存性
允许任何缓存(包括共享缓存如CDN、代理)存储响应——即使是通常被视为不可缓存的响应。
将缓存限制在请求的浏览器只——共享缓存不得存储此响应。
允许存储,但在每次重用前强制与源重新验证。尽管名称如此,但不会禁用缓存。
禁止任何缓存在任何地方存储响应。最严格的指令——覆盖此处的所有其他指令。
新鲜度
响应对浏览器和共享缓存保持新鲜多长时间(以秒为单位)。留空以省略。
仅对共享缓存(CDN、代理)覆盖max-age。留空以省略。
新鲜度过期后,在后台重新验证时可以服务过时响应长达此秒数。留空以省略。
如果重新验证失败(源错误或超时),可以服务过时响应长达此秒数而不是显示错误。留空以省略。
重新验证及其他
响应过期后必须在重新使用前与源重新验证——即使源无法访问,缓存也不得提供过时数据。
与must-revalidate相同,但仅对共享缓存有效——浏览器不受影响。
告诉浏览器响应体在新鲜时永不更改,因此应完全跳过条件重新验证——即使在手动重新加载时。没有max-age/s-maxage则无意义。
禁止缓存和代理修改响应体(如图像重新压缩),即使它们通常会这样做。
缓存仅当它理解其状态代码的语义时才能存储此响应——通常与no-store配对。
输出
完整的头行,准备粘贴到你的服务器响应配置中。
| 指令 | 效果 |
|---|---|
| No data yet | |
矛盾的或部分冗余的组合——头仍然生成,但这些指令在一起时可能不会按你期望的那样表现。
使用指南
什么是HTTP缓存控制头构建器?
Cache-Control是HTTP响应头,告诉浏览器、CDN和代理响应是否可以缓存、保持多长时间以及过期后如何重新验证。这也是最容易出错的头之一:no-cache并不意味着"不缓存";no-store会静默覆盖你与它一起设置的几乎所有内容;s-maxage仅对共享缓存重要,而max-age对两者都重要。此工具从单个指令(或精选预设)组装正确的头,并用简明语言解释每个活跃指令的确切功能——并标记相互矛盾或部分相互抵消的组合。
如何使用
- 为常见场景选择Context Preset——API响应、静态资产、HTML页面或私密数据——或保留在Custom以手动切换指令。
- 在自定义模式下,选中适用的Cacheability指令(
public、private、no-cache、no-store),以秒为单位设置Freshness生命周期(max-age、s-maxage、stale-while-revalidate、stale-if-error),并启用所需的Revalidation指令(must-revalidate、proxy-revalidate、immutable、no-transform、must-understand)。 - Cache-Control Header框会自动更新——复制到你的服务器响应配置、CDN规则或应用代码中。
- 阅读What Each Directive Does以获得启用的每个指令的简明解释,检查Warnings中是否有与已设置的其他指令相矛盾或悄悄抵消的内容。
选择预设
- API response —
no-store。永远不应被任何人缓存的动态的、每请求数据。 - Static asset —
public, max-age=31536000, immutable。适用于带哈希或版本化文件名(app.a1b2c3.js)的文件——URL本身在内容更改时更改,因此安全地缓存一年并完全跳过重新验证。 - HTML page —
no-cache。URL保持不变但内容可能更改,所以缓存可以存储它但在再次提供前必须检查源。 - Private data —
private, max-age=0, must-revalidate。账户页面、购物车或任何用户特定的内容——仅由浏览器缓存且始终重新验证。
常见问题
no-cache和no-store之间的区别是什么?
no-cache允许缓存存储响应,但在再次提供前强制其与源服务器重新验证——这是"先检查"指令,不是"不缓存"指令。no-store是严格版本:没有缓存可以存储响应。将no-store与max-age或must-revalidate等指令混合在一起并非无效,但那些指令变得毫无意义——no-store已经阻止了任何存储以供它们应用。
max-age和s-maxage之间的区别是什么?
max-age为每个缓存设置新鲜度生命周期——浏览器和中间的任何共享缓存(CDN、代理)。s-maxage仅对共享缓存覆盖该生命周期,让你在CDN处缓存响应比在访问者自己的浏览器中缓存时间更长(或更短)。s-maxage在private响应上无效,因为共享缓存根本不被允许存储私密响应。
immutable是否意味着响应永不重新验证?
仅在其新鲜度窗口内。immutable告诉浏览器在max-age(或s-maxage)认为响应是新鲜的期间,它可以完全跳过条件重新验证请求——甚至在用户触发的重新加载时。一旦该窗口结束,常规重新验证规则再次适用。在没有max-age/s-maxage的情况下设置immutable使其没有可应用的新鲜度窗口。
Cache-Control是我需要的唯一缓存头吗?
它是控制新鲜度和存储的主要头,但ETag和Last-Modified等验证器仍对重新验证请求很重要——这是缓存在max-age过期后发送回源以询问"这是否已更改?"的内容。要在没有秒数算术的情况下将持续时间转换为可用的max-age=值,请使用Cache TTL Calculator。对于跨源请求上等效的头构建工作流,请参阅CORS Headers Builder。
隐私
此工具完全在你的浏览器中运行。你设置的指令和值永不会被发送到我们的服务器或存储在我们的服务器上。
使用此工具的更多方式
REST API
curl -X POST https://api.iotools.cloud/v1/tool/cache-control-header-builder \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"preset": "staticAsset"
}'替换成您账户中的密钥。工具的字段即为请求体——没有额外包装。
让 AI 代理执行
Use the IOTools `cache-control-header-builder` tool (HTTP Cache-Control Header Builder) on this input:
YOUR_INPUT_HERE将此粘贴给任何已连接 IOTools MCP 服务器的代理,再加上您的输入内容。
嵌入式小组件
<iframe
src="https://iotools.cloud/embed/cache-control-header-builder/"
width="100%" height="520" frameborder="0" scrolling="no" loading="lazy"
title="HTTP缓存控制头构建器 — iotools.cloud"
sandbox="allow-scripts allow-forms allow-same-origin allow-downloads allow-popups allow-popups-to-escape-sandbox"
allow="clipboard-write"
style="width:100%;border:1px solid #e5e7eb;border-radius:12px;overflow:hidden"></iframe>
<script src="https://iotools.cloud/embed.js" async></script>把它放到您自己的页面上——免费,无需密钥,只需保留一个反向链接。
| 每次调用费用 | 5 积分起 |
|---|