这事越传越离谱,91官网 | 关于缓存设置的说法:越往下越离谱。别被带节奏,但也别装瞎
这事越传越离谱,91官网 | 关于缓存设置的说法:越往下越离谱。别被带节奏,但也别装瞎

最近关于“缓存设置该怎么弄”的帖子越来越多,结论也越来越极端:有人说所有静态资源都要缓存一年,有人说任何缓存都会让用户看到旧内容,还有人把 CDN、浏览器缓存、代理缓存混为一谈,越看越晕。把问题拉回现实:缓存是工具,不是圣经,理解原理后再做策略,能既提升体验又避免踩雷。
一眼看清缓存的几件事
- 缓存的目的:减少延迟、降低带宽和后端压力,提高用户体验。
- 缓存位置很多:浏览器(用户端)、中间代理(ISP、企业代理)、CDN、服务器端缓存(如 Redis)——每一层的控制方式不完全相同。
- 常见误解:no-cache ≠ 不缓存;长时间缓存+版本化胜过频繁清缓存;CDN 不会自动“理解”你的网站语义,配置要准确。
常见说法以及到底靠不靠谱
- 说法1:“所有静态资源都应该缓存一年”。有道理但不全面。对真正不变的资源(通过文件指纹化管理)可以设置长缓存(Cache-Control: public, max-age=31536000, immutable)。但对频繁更新的资源或 HTML 主文档,不能一刀切。
- 说法2:“HTML 也要长缓存,最后靠 JS 更新”。危险。主文档是变更频率高的部分,长缓存会导致用户长时间看不到更新。更稳妥的做法是对 HTML 使用短缓存或 no-cache 配合 ETag/Last-Modified。
- 说法3:“no-cache 就是不缓存”。误读。no-cache 表示客户端在使用缓存副本前必须向服务端验证(revalidate),而 no-store 则是不保存任何副本。
- 说法4:“CDN 一切搞定”。CDN 能加速分发,但缓存策略、缓存键、Vary 头、Cookie 等都会影响命中率,不能完全依赖默认配置。
如何快速检查别人说的到底靠谱吗(实用工具)
- 在浏览器按 F12,Network 面板看资源的 Response Headers(Cache-Control、ETag、Last-Modified、Expires、Age)。
- 命令行检查:curl -I https://your.site/path 会显示响应头,示例: HTTP/1.1 200 OK Cache-Control: public, max-age=31536000, immutable ETag: "abc123"
- 多点测试:用不同网络(家里、手机数据、VPN)看效果,确认是否被 ISP 或企业代理改变响应。
实用缓存策略建议(可按需组合)
- 静态资源(JS/CSS/图片、且文件名包含 hash):Cache-Control: public, max-age=31536000, immutable。通过指纹化更新文件名解决缓存失效问题。
- HTML 页面(主文档):Cache-Control: no-cache, must-revalidate 或 Cache-Control: private, max-age=0; 同时保留 ETag/Last-Modified 以便快速验证。
- API/动态数据:通常使用 Cache-Control: no-store 或短期 max-age,并在服务端做好版本/缓存策略。某些缓存友好的 GET 接口可以用 s-maxage 给 CDN 专用指令。
- CDN 专用:s-maxage 优先于 max-age,用于控制共享缓存。注意 Vary: Cookie/User-Agent 会降低缓存命中率,只有必要时才设置。
应对缓存带来的旧内容问题的几种做法
- 文件名指纹(推荐):把版本写进文件名(app.abc123.js),更新时改变文件名,CDN 和浏览器会认为是新资源。
- Query string(有时可用):?v=1.2,但部分 CDN 会忽略或需要额外配置。
- Cache-Control: immutable:告诉浏览器资源不变,避免重复验证(配合指纹化更安全)。
- 回滚与快速更新:在灰度发布或回滚时,保证主文档不会被长时间缓存,能快速指向新资源或回滚逻辑。
常见陷阱要小心
- ETag 在多台主机上如果不统一可能导致无谓的 304/重新传输;用统一生成策略或禁用复杂 ETag。
- Cookie 或 Authorization header 会阻止共享缓存;把可缓存的资源放到无 cookie 的静态域名或子域。
- 误把 no-cache 当成 no-store,导致开发者以为“设置了 no-cache 就不会缓存”,结果频繁走后端增加负担。
部署前的检查清单(简单化步骤)
- 用 curl 或浏览器工具检查每类资源的响应头。
- 模拟发布:改变静态资源指纹并验证旧用户能否更新到新版本。
- 用 CDN 控制台查看缓存命中率及被哪些 header/设置影响。
- 在真实网络环境(手机、家宽、公司网络)做端到端测试。
结语 别被社交媒体上一句极端论断带节奏,也不要装瞎不看事实。缓存既能提升体验,也能隐藏问题。把握好“谁缓存、缓存什么、缓存多久”三个维度,结合指纹化、合理的 Cache-Control 和验证机制,就能把“离谱”的结论变成可控的性能提升。需要具体到你的网站结构和发布流程时,可以把你的资源类型和当前响应头贴出来,我帮你逐条看。
