最直接有效的做法是为静态资源设置长缓存并配合内容哈希命名与immutable指令。需对CSS、JS、图片等用哈希命名(如app.a1b2c3.js),HTML引用新路径,响应头配Cache-Control: public, max-age=31536000, immutable;CDN与源站缓存策略须一致;index.html应设no-cache或max-age=0,避免拖慢缓存链。

可以,而且这是最直接有效的做法之一。关键不是给 HTML 本身设长缓存,而是把 CSS、JS、图片等静态资源的缓存时间拉长,并确保更新时浏览器能自动加载新版——否则用户会卡在旧文件里。
静态资源必须用内容哈希命名
光设 max-age=31536000(一年)还不够。如果文件名不变(比如一直叫 app.js),哪怕你改了代码重新部署,浏览器仍可能复用本地旧缓存,因为 URL 没变。
- 构建时生成带哈希的文件名,例如 app.a1b2c3.js、style.f4e5d6.css
- HTML 中引用这些带哈希的路径,每次内容变更,哈希值就变,URL 就是新资源
- 这样你才能放心地配
Cache-Control: public, max-age=31536000, immutable
响应头要配对使用 immutable 指令
max-age 告诉浏览器“缓存多久”,immutable 则进一步说明“这期间绝不会变”。它能让浏览器跳过协商缓存(不发 If-None-Match 请求),直接读本地副本,减少一次网络往返。
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
- Nginx 示例:
add_header Cache-Control "public, max-age=31536000, immutable"; - Apache 示例:
Header set Cache-Control "public, max-age=31536000, immutable" - 注意:immutable 只适用于完全由哈希控制版本的资源,不能用于 index.html 或动态生成的 JS
CDN 和源站缓存策略必须一致
如果 CDN 缓存了 1 小时,而你的源站返回的是 max-age=1 年,CDN 可能按自己的规则截断;反过来,如果源站设了短缓存,CDN 即使想缓也缓不住。
立即学习“前端免费学习笔记(深入)”;
- 检查 CDN 控制台或配置文件(如 Cloudflare Page Rules、Vercel headers、AWS CloudFront cache policy)
- 确保 CDN 对
.js、.css、.png等扩展名的缓存行为,和源站响应头中的 Cache-Control 保持一致 - 常见错误:源站返回
Cache-Control: public, max-age=31536000,但 CDN 默认只缓存 24 小时
别让 HTML 拖慢整个缓存链
index.html 是所有资源的入口,它本身不该长期缓存。如果它被缓存太久,即使 JS/CSS 已更新,用户加载的仍是旧 HTML,引用的还是旧哈希名,新版资源根本不会被拉取。
- 推荐设置:
Cache-Control: no-cache或max-age=0, must-revalidate - 避免写
public, max-age=3600给 HTML,除非页面完全静态且极少更新(如公司介绍页) - 绝对不要依赖
<meta http-equiv="Cache-Control">,现代浏览器无视它


















