浏览器强制读缓存时,Ctrl+Shift+R可能失效,需禁用DevTools的cache、检查响应头Cache-Control、加URL参数绕过、确认实际构建产物路径、排查Nginx/CDN缓存及文件系统保存状态。

浏览器强制读缓存,连 Ctrl+Shift+R 都可能失效
IE、MyEclipse 内置浏览器、某些老旧版本 Edge 默认启用强缓存策略,哪怕你按了 Ctrl+Shift+R,它仍可能从磁盘缓存(from disk cache)返回旧 HTML。这不是 bug,是设计行为:静态文件默认被标记为可缓存。
- 打开开发者工具 →
Network标签页 → 勾选Disable cache(注意:必须保持 DevTools 开着,关掉就失效) - 在请求列表里点开 HTML 对应的条目 → 查看
Response Headers→ 确认有没有Cache-Control: no-cache或类似字段;没有就说明服务端没禁缓存 - 临时验证:把 URL 末尾加个随机参数,比如
index.html?v=123,绕过所有缓存层级
你改的不是服务器实际加载的那个 index.html
很多框架(Vue CLI、Vite、UniApp、Next.js)根本不直接 serve 你编辑的源文件,而是用它当模板生成新 HTML。你以为保存了 src/index.html,其实构建产物在 dist/index.html,而开发服务器读的是内存里的副本。
- UniApp:必须改
public/index.html,且manifest.json中要显式配置"h5": { "template": "public/index.html" } - Vue CLI:根目录的
index.html是模板,但开发时热更新不触发 HTML 重解析——改完得手动重启 dev server 或删node_modules/.vite缓存目录 - Vite:若你在
index.html里写了<script src="./js/app.js"></script>,路径是相对的,开发服务器不会自动映射到public/js/app.js,导致 404;应改用绝对路径/js/app.js或确保文件放在public/下
服务端或 CDN 挡在中间,根本没把新内容发出来
即使你本地改对了、浏览器也清了缓存,Nginx、Apache 或 CDN 仍可能返回旧响应。尤其 Nginx 默认开启 sendfile on,会跳过常规缓存控制逻辑,直接零拷贝发送文件。
- Nginx 调试时临时加配置:
sendfile off;+add_header Cache-Control "no-store, no-cache";,然后nginx -s reload - CDN 场景下,“源站已更新” ≠ “用户看到更新”,必须进控制台手动提交 URL 刷新(如腾讯云叫「预热刷新」,Cloudflare 叫「Purge Cache」)
- 本地 Python 快速起服务测试:
python -m http.server 8000 --bind 127.0.0.1,避免 file:// 协议限制和浏览器安全拦截
view-source: 才是你该信的唯一真相
别靠肉眼判断“我改了”,右键浏览器 → 「查看网页源代码」,然后搜索你刚加的关键字。如果搜不到,说明前面所有操作都白做了——要么路径错、要么没保存、要么构建没生效、要么被代理劫持了。
立即学习“前端免费学习笔记(深入)”;
- 这个动作能一次性排除:编辑器未保存、文件被覆盖、构建产物未生成、反向代理返回错误路径、CDN 缓存未剔除
- 如果源代码里有你的修改,但页面渲染不对,问题就转移到 JS 动态逻辑(比如 Vue 的
mounted()里又重写了<title></title>)、CSS 优先级、或字体/编码声明冲突(<meta charset="GBK">鍜



















