HTTP 缓存 TTL / max-age 计算器
指导
HTTP 缓存 TTL / max-age 计算器
以可视方式构建 HTTP Cache-Control 标头。选择一个缓存策略预设或配置单个指令 — max-age、s-maxage、stale-while-revalidate、immutable 等。获取一个可直接使用的标头字符串,并附带易于理解的说明和 CDN 特定等效项。
如何使用
选择一个策略预设(静态资源、HTML 页面、API 响应、CDN 边缘缓存)来自动填充常见配置,或使用自定义模式从头开始构建您的标头。切换指令,设置 max-age 和 s-maxage 的时间值,完整的 Cache-Control 标头字符串将即时生成。直接将其复制到您的服务器配置、.htaccess 或应用程序代码中。
特征
- 策略预设 – 常见场景的预配置设置:静态资源(1 年,immutable)、HTML 页面(每次请求都重新验证)、API 响应(private、no-cache)和 CDN 边缘缓存。
- 所有 Cache-Control 指令 – 配置 public、private、no-cache、no-store、max-age、s-maxage、stale-while-revalidate、stale-if-error、must-revalidate、proxy-revalidate、no-transform 和 immutable。
- 冲突检测 – 当您选择 no-store 和 max-age 等冲突指令,或 public 和 private 同时出现时发出警告。
- 易读时间显示 – 自动将秒转换为易读格式(86400 秒 = 1 天),显示在每个时间输入旁边。
- 标头说明 – 提供通俗易懂的解释,说明您配置的标头实际上做了什么。
- CDN 特定标头 – 为 Cloudflare (CDN-Cache-Control)、Varnish/Fastly (Surrogate-Control) 生成等效标头。
- 实时生成 – 标头字符串会在您切换任何指令或更改任何值时即时更新。
何时使用此工具
在配置 Web 应用程序的缓存、设置 CDN 缓存策略、优化静态资源交付或调试缓存行为时使用此工具。对于需要构建正确的 Cache-Control 标头而无需记忆 RFC 7234 规范的 Web 开发人员、DevOps 工程师以及任何处理 HTTP 缓存的人来说,它至关重要。
常问问题
-
什么是 Cache-Control 标头?
Cache-Control 是一个 HTTP 标头,它告诉浏览器和 CDN 如何缓存响应。它控制响应是否可以缓存(public vs private)、可以缓存多久(以秒为单位的 max-age)、在使用前是否必须重新验证(no-cache、must-revalidate),以及是否根本不应存储(no-store)。正确设置 Cache-Control 是最有效的 Web 性能优化方法之一。
-
max-age 和 s-maxage 有何区别?
max-age 设置所有缓存的缓存生命周期 — 包括浏览器缓存和共享(CDN/代理)缓存。s-maxage(共享 max-age)专门覆盖 CDN 和代理服务器等共享缓存的 max-age,而浏览器仍使用 max-age。这允许您设置不同的缓存持续时间:例如,max-age=60(浏览器缓存 1 分钟),s-maxage=86400(CDN 缓存 1 天)。这是内容偶尔更改的常见模式。
-
stale-while-revalidate 有什么作用?
stale-while-revalidate 允许缓存提供过时的(已过期的)响应,同时在后台获取新的响应。例如,stale-while-revalidate=86400 意味着缓存可以在提供过期响应长达 1 天的同时,异步地对其进行重新验证。这大大提高了感知性能,因为用户无需等待重新验证 — 他们会立即获得(略微过时的)响应,而缓存会在下次请求时自行更新。
-
no-cache 和 no-store 有什么区别?
no-cache 并不意味着“不要缓存”。它意味着“缓存响应,但在使用之前始终与服务器重新验证”。浏览器会存储响应,但在提供之前会与服务器(通过 ETag 或 Last-Modified)进行检查 — 如果内容未更改,服务器将响应 304 Not Modified,并使用缓存的版本。no-store 意味着“根本不要缓存” — 响应不得被任何缓存存储。对于可能更改但受益于条件请求的内容,请使用 no-cache;对于不应持久化的敏感数据,请使用 no-store。
