javascript文件应配置cache-control: public, max-age=31536000, immutable实现强缓存,html入口文件需设no-cache, must-revalidate确保及时更新,并辅以etag兜底验证。

要让 JavaScript 文件加载更快、复用更高效,关键不是“多缓存”,而是“缓存得准”——即通过精准配置 HTTP 缓存响应头,让浏览器在资源不变时长期复用,变更时立即更新。核心在于区分资源稳定性:静态 JS(如打包后的 v1.2.3/app.js)应长期强缓存;动态入口(如 index.html)需禁止缓存或极短时效。
给 JS 文件配强缓存:Cache-Control + immutable 是黄金组合
对已带哈希指纹的 JS 文件(例如 main.a1b2c3.js),服务端应返回:
说明:
- public:允许 CDN、代理等中间节点缓存,提升边缘命中率
- max-age=31536000:缓存 1 年(365 天),足够覆盖绝大多数发布周期
-
immutable:告诉浏览器“此资源内容永不改变”,即使用户手动刷新也不发条件请求(跳过
If-None-Match),彻底避免协商缓存开销
⚠️ 注意:该策略仅适用于文件名含内容哈希(如 Webpack 的 [contenthash])的资源。若文件名固定(如 app.js),改用 no-cache 或配合 ETag 更稳妥。
入口 HTML 必须禁用强缓存,否则 JS 更新不生效
JS 文件可缓存一年,但引用它的 HTML 不能缓存太久——否则用户仍加载旧 HTML,里面还连着旧 JS 地址。
服务端对 index.html 等入口文件应返回:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
含义:
- no-cache:每次访问都需向服务器验证(走 304 协商缓存),确保 HTML 最新
- must-revalidate:一旦过期,必须校验,不可降级使用陈旧副本
这样既避免 HTML 长期滞留,又保留了 304 的轻量验证优势(比 200 响应小得多)。
配合 ETag 实现安全的协商缓存兜底
即使用了 immutable,也建议服务端为 JS 文件生成并返回 ETag(如基于文件内容的 SHA256 值):
作用:
- 当 CDN 或中间代理不支持
immutable时,ETag 可作为协商缓存依据 - 若因部署异常导致文件名未变但内容已改,ETag 能确保浏览器发现差异并拉取新版本
- 与
Last-Modified相比,ETag 更精确(秒级时间戳可能漏判同秒内多次构建)
验证是否生效:看 Network 面板的两个关键标识
在 Chrome DevTools 的 Network 标签页中,加载 JS 文件后检查:
- 若显示 from memory cache 或 from disk cache,且 Status 为
200(非 304),说明强缓存命中 - 若 Status 显示
304,说明协商缓存生效,服务器确认资源未变 - 若 Status 是
200且 Size 列为真实字节数(非 from cache),说明缓存完全失效,需检查响应头或 URL 是否变动
不复杂但容易忽略:缓存寿命延长的前提,是构建流程真正输出带哈希的文件名,并确保服务端按路径精确匹配响应头策略。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










