内容哈希文件名:一次配置,永久命中
与其纠结 TTL 设多长、什么时候刷新,不如让文件名本身随内容变化——改了就是新地址,旧地址永远不需要失效。
5 分钟缓存与命中

要点
带内容哈希的静态资源可以设一年 TTL 加 immutable。发版时文件名自动变化,既不用刷缓存也不会有旧版本残留。
思路
缓存失效之所以麻烦,是因为「同一个地址的内容变了」。如果内容变化时地址也跟着变,这个问题就不存在了。
# 构建产物带内容哈希
/assets/app.7f3a91c2.js
# 可以放心设成永不过期
Cache-Control: public, max-age=31536000, immutableimmutable 的作用是告诉浏览器「连验证都不用发」。没有它,用户刷新页面时浏览器仍可能对已缓存资源发起条件请求;有了它,浏览器直接用本地副本。
哪些文件不能这么做
HTML 入口必须是短 TTL
HTML 里写着资源的哈希文件名,它是引导用户拿到新版本的入口。如果 HTML 也被长期缓存,用户会一直加载旧 HTML、引用旧资源,新版本永远发不出去。
落地检查
- 确认构建工具已开启内容哈希(多数现代打包器默认开启);
- 给带哈希的路径单独配一条 CDN 缓存规则,TTL 设一年;
- HTML 入口单独配短 TTL,并加上 stale-while-revalidate;
- 发版后用实测工具确认新旧文件名并存、旧地址仍能访问——这是回滚的保障。
在你的网站验证
边缘核验确认你的静态资源 TTL 与 immutable 是否已生效