A+级浏览器缓存需分层控制:静态资源用哈希文件名+immutable实现永久缓存;HTML入口页配no-cache与ETag实现秒级更新;关键接口需合理兜底。

要实现 A+ 级浏览器缓存,核心不是“缓得越久越好”,而是按资源变与不变的特性分层控制:静态资源激进缓存、HTML 严格验证、关键接口合理兜底。下面是一套经生产验证、兼顾加载速度与内容新鲜度的通用模板。
一、静态资源:用哈希文件名 + immutable 实现“永久缓存”
适用于 CSS、JS、图片、字体等构建后内容固定、文件名含内容哈希(如 app.8a3f2e1b.js)的资源:
- 在 Nginx 中匹配哈希特征(如 8 位及以上十六进制串 + 常见扩展名)
- 设置
Cache-Control: public, max-age=31536000, immutable -
immutable是关键:告诉浏览器“这资源一年内绝不会变”,连协商请求(If-None-Match)都跳过,真正零网络开销 - 不依赖
Expires——它受客户端时间影响,已淘汰
二、HTML 入口页:no-cache + ETag 验证,秒级更新可见
单页应用的 index.html 或服务端渲染首页,内容频繁更新但体积小:
- 配置
Cache-Control: private, no-cache, must-revalidate - 确保 Nginx 自动开启
ETag(默认启用)或Last-Modified - 浏览器每次访问都会发条件请求(
If-None-Match),未变则返回 304(仅约 100 字节),变则返回新 HTML(通常 - 避免用
max-age=0——它仍会触发无意义的完整请求;no-cache才是语义正确的“先验证再用”
三、API 接口与动态资源:按业务敏感度分级设置
非静态资源需结合业务逻辑权衡:
- 用户资料、订单状态等强实时接口:
Cache-Control: no-store(禁止任何缓存)或no-cache(强制验证) - 天气、新闻列表等弱实时数据:
max-age=60(1 分钟),配合 ETag 验证,90% 请求走 304 - 公开配置、字典项等低频变更数据:
max-age=3600(1 小时),降低后端压力 - 所有动态响应建议启用
ETag(基于响应体哈希),比Last-Modified更精准,且优先级更高
四、兜底与容错:避免缓存污染与误命中
再好的策略也需防御性设计:
- 禁用
Pragma和过时的Expires混用,只以Cache-Control为唯一权威 - 对所有可缓存资源,确保响应头含
Vary: Accept-Encoding(支持 gzip/brotli 区分缓存) - 开发环境关闭缓存:
add_header Cache-Control "no-cache, no-store, must-revalidate" always; - 上线前用
curl -I或浏览器 Network 面板检查实际响应头,确认无中间代理(如 CDN、WAF)覆盖或清空你的设置



















