—
—
| 现象 | 真凶 | 怎么确认 |
|---|---|---|
| 改了 CSS / JS,线上「看起来没生效」 | 长缓存 + 引用没有版本号 | curl -I 看 max-age;换新版本号再发 |
| 服务器日志全 200,页面却报「数据读不到」 | 浏览器跑旧脚本,渲染新数据格式时崩溃,被 catch 谎报成网络故障 | 控制台看报错行;脚本改 no-cache 后 Ctrl+F5 |
| 有的页面新、有的页面旧 | 同一个 CSS 被多个页面引用,只改了其中几个的版本号 | 全站搜该资源名,批量升版本 |
| 后台改完要等好几天才生效 | 后台页面被设成长缓存 | 后台一律 no-store |
| 数据一直是最旧的 | 数据接口被 CDN 或浏览器缓存 | 接口 no-store;fetch 带时间戳参数 |
| 本机 curl 正常、用户浏览器不行 | CDN 那一层还在缓存旧版本 | 用 -H 'Cache-Control: no-cache' 对比,并在 CDN 控制台刷新 |
1 · 服务器 200,页面报错。后台脚本被 expires 7d 缓存,改版后浏览器仍在跑旧脚本,旧脚本解析新数据格式时崩溃,而 catch 把渲染异常也报成「服务器读不到」,方向完全带偏。
2 · 修法:后台脚本单独 no-cache。location = /assets/js/admin.js { add_header Cache-Control "no-cache"; }——精确匹配会压过静态资源的正则长缓存规则。
3 · 报错文案要分流。「数据已到达但渲染崩」和「网络请求失败」必须报成两句话,否则排查方向会被带偏两天。
4 · 简单规则记住一条就够:设长缓存就必须带版本号;不带版本号的一律不长缓存。