我真的忍不住吐槽一句:如果你觉得91网不对劲,先从缓存管理查起(真相有点反常识)

为什么缓存会“骗人”?
- 缓存本质是为了加速和减轻后端负担,但它有“滞后性”。页面或资源已经更新,但缓存还在发老版本,用户看到的就不是最新内容。
- 多层缓存叠加:浏览器缓存、CDN缓存、反向代理(如Varnish、Nginx缓存)、应用层缓存(Redis、Memcached)、服务端静态文件缓存、甚至运营商/学校/公司网络的中间缓存。任何一层的问题都可能造成“局部怪异”——只有部分用户受影响。
- 服务工作者(Service Worker)和PWA会在客户端强制缓存离线资源,导致老文件长期停留在用户设备上。
- 缓存策略不统一:HTML设置短缓存,静态资源设置长缓存,但部署时忘记变更资源版本号,会导致浏览器拿到旧的CSS/JS与新的HTML不匹配,页面显示异常。
典型的“我以为是代码,结果是缓存”的案例
- 页面样式错乱,但后台控制台显示最新CSS已经部署。原因:浏览器或CDN仍在返回旧CSS,新的JS引用了不存在的类名。
- 用户投诉登录失败、表单不生效,开发者本地能复现不了。原因:某个中间缓存持有旧的Cookie/Session路由数据,或者反向代理返回了缓存的错误响应。
- 只在某些地区或网络出现问题。原因:CDN节点或ISP边缘缓存有问题,或某次部署后未全网清理缓存。
一步步排查——快速清单(实战优先) 1) 先用无痕/另一个浏览器试试
- 如果问题消失,优先怀疑浏览器缓存或服务工作者。清理缓存或卸载注册的Service Worker后再试。
2) 强制刷新 & 缓存绕过
- Windows: Ctrl+F5 / Ctrl+Shift+R;Mac: Cmd+Shift+R。比较简单直接。
3) 用curl看响应头
- 命令:curl -I -L https://91xxx.com/page
- 关注字段:Cache-Control、Expires、ETag、Last-Modified、Age、CF-Cache-Status(Cloudflare)、X-Cache(Varnish/Nginx)、Via、Server。
- 举例:看到 Age: 300 或 CF-Cache-Status: HIT 就说明是缓存返回的旧内容。
4) 带上无缓存请求头确认
- curl -H "Cache-Control: no-cache" -I https://…
- 或 curl -H "Pragma: no-cache" -I …
- 如果带头请求返回的是新内容,说明是某层缓存导致问题。
5) 检查CDN与代理面板
- Cloudflare、Fastly、阿里云CDN 等面板可以查看命中率、最近的清理记录,进行单文件/全站清理(Purge)。
- 若使用Nginx/Varnish,查看是否有失当的缓存规则或意外地缓存了动态页面。
6) 看Service Worker
- 打开DevTools -> Application -> Service Workers,卸载或更新它,或者在控制台模拟“离线”与“在线”看差异。
7) DNS和ISP缓存
- DNS解析错误/滞后也会造成请求指向旧节点或回源失败。尝试刷新本机DNS(Windows: ipconfig /flushdns)或在不同网络下测试(切换手机数据)。
8) 查应用层缓存
- WordPress 等会有对象缓存(Redis/Memcached),某些缓存插件/策略会缓存整页。部署后应触发插件的清理或使用自动化脚本清理。
整改建议(让问题不再复发)
- HTML短缓存、静态资源长缓存:把HTML(动态页面)TTL设短,静态资源(css/js、图片)设长并启用版本号(文件名加 ?v= 或更推荐的文件名指纹化,如 app.abc123.js)。
- 版本化部署:每次构建把静态资源带上哈希(content hash),这样即使CDN缓存,引用改变也会强制拉取新文件。
- 自动化清理:CI/CD 发布脚本里加上 CDN cache purge 和应用缓存清理步骤,避免人工遗漏。
- 清晰的Cache-Control策略:避免默认把动态页面设置为 public, max-age 很大。对 API/登录相关响应应加 no-store/no-cache。
- Service Worker 管理:在PWA里做好更新控制,强制激活新 SW 并在激活时清理旧缓存或优雅提示用户刷新。
- 监控与回滚策略:部署后通过 curl 或外部监测节点验证 HEAD/GET 的响应头和内容。若发现不一致,快速回滚或触发清理。
快速排查流程(三分钟版本)
- 无痕/不同浏览器试一次
- curl -I 检查 Cache-Control、Age、CF-Cache-Status
- 带 no-cache 再请求确认
- 如是CDN,登录面板 Purg e/Invalidate
- 若是Service Worker,卸载或更新
想省心一点?我可以帮做一次全面的缓存与部署流程诊断,找出最容易出错的环节并给出可执行的修复方案。过了缓存这一关,91网就能少很多莫名其妙的问题——这话我不吐槽都难。

