cache-control配置关键在于匹配资源特性:不变静态文件用max-age,常更新但可验证延迟的内容用no-cache,敏感或强实时内容用no-store;no-cache允许缓存但每次使用前必须协商验证,no-store彻底禁用所有缓存,max-age定义强缓存有效期(秒),优先级高于expires。

设置 Cache-Control 的关键是匹配资源特性:不变的静态文件用 max-age,常更新但可接受验证延迟的内容用 no-cache,含敏感信息或必须实时的内容用 no-store。
no-cache:缓存可用,但每次用前必须验证
它不禁止缓存,只是跳过强缓存阶段,强制进入协商缓存流程。浏览器会把资源存下来,但每次请求时自动带上 If-None-Match 或 If-Modified-Since 头,向服务器确认是否变化。
- 服务器返回
304 Not Modified→ 浏览器读本地副本(节省带宽) - 服务器返回
200 OK + 新内容→ 替换本地缓存 - 推荐搭配
must-revalidate和max-age=0,语义更明确:Cache-Control: no-cache, max-age=0, must-revalidate - 适合新闻页、用户仪表盘、API 响应等“内容可能变,但不必每次都拉全量”的场景
no-store:彻底禁用任何缓存
浏览器和所有中间代理(如 CDN、网关)都不得存储该响应的任何字节。每次访问都必须发起完整请求并接收完整响应。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 不会产生
304,也不会读本地磁盘或内存缓存 - 适用于银行交易页、登录表单、一次性下载链接、实时股价接口等强安全或强时效性需求
- 性能开销最大,但数据最可控
- 注意:不能和
public、immutable等指令混用,逻辑冲突
max-age:定义强缓存有效期(秒为单位)
告诉浏览器这个资源在多少秒内可直接从本地缓存读取,无需发请求。这是最高效、最常用的缓存策略。
-
max-age=31536000→ 缓存 1 年,适合指纹化静态资源(如app.a1b2c3.js) -
max-age=0→ 表示“立即过期”,触发协商缓存,效果接近no-cache,但语义稍弱 - 可与
public(允许 CDN 缓存)或private(仅限用户浏览器)组合使用 - 优先级高于
Expires,且基于响应到达时间计算(浏览器)或生成时间(CDN),更可靠
怎么选?看三个判断点
面对一个接口或资源,快速决策:
- 资源是否含敏感/一次性信息?→ 是 → 用
no-store - 资源是否长期稳定不变?→ 是 → 用
max-age=较大值(配合文件哈希更佳) - 资源会更新,但允许用户看到“旧但已验证”的内容?→ 是 → 用
no-cache(或max-age=0)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










