强制刷新(Ctrl+F5或Cmd+Shift+R)并非清空缓存,而是跳过强缓存、发起带If-None-Match等头的协商请求,服务器返回304时仍用本地缓存,仅200时更新资源。

强制刷新(Ctrl+F5 或 Cmd+Shift+R)到底做了什么
按下 Ctrl+F5(Windows/Linux)或 Cmd+Shift+R(Mac)不是“清空缓存”,而是跳过强制缓存判断,向服务器发起带条件请求头(如 If-None-Match、If-Modified-Since)的验证请求。服务器返回 304 Not Modified 时,浏览器仍用本地缓存;返回 200 OK + 新内容时才替换。这意味着:如果服务器响应头是 Cache-Control: public, max-age=86400,哪怕你按十次强制刷新,只要没超时,依然不会发新请求。
DevTools Network 面板中 Disable cache 的真实作用
勾选 Disable cache 后,只要开发者工具保持打开状态,所有请求都会忽略强缓存和协商缓存逻辑,强制走完整 HTTP 流程——即每次请求都带完整资源校验头,并接受服务器返回的任意状态码(200、304、甚至 404)。但它不修改本地缓存内容,也不影响其他标签页或关闭后的行为。常见误操作是:勾选后刷新一次就关掉 DevTools,结果下次访问又回到旧缓存。
- 必须保持 Network 面板开启,且
Disable cache处于勾选状态 - 该设置对 Service Worker 缓存无效——SW 可能仍从自己的
cacheStorage返回旧资源 - 若页面由 PWA 加载,需额外检查 SW 是否拦截了
index.html请求并返回了陈旧版本
用 URL 参数临时绕过缓存的实操要点
在 URL 后加 ?v=1 或 ?t=1728553140 是最直接的“欺骗”手段,但要注意:它只对当前资源生效,且依赖服务器未重写或忽略查询参数。例如 Nginx 配置了 try_files $uri $uri/ /index.html;,那么 /app/index.html?v=2 仍会命中 index.html,而该文件本身若被强缓存,问题依旧。
- 优先加在 HTML 文件路径后,如
https://example.com/index.html?v=2 - 避免使用固定值(如总用
v=1),否则浏览器可能缓存这个带参数的 URL 本身 - 动态时间戳更可靠:
?t=,用 JS 注入Date.now(),但仅适用于调试,不可用于生产
无痕模式为什么能快速验证缓存问题
无痕窗口启动时完全不读取已有缓存、Cookie、Service Worker 注册状态或 localStorage,等效于一个“全新浏览器实例”。它不解决缓存问题,但能帮你快速定位问题是否源于本地持久化状态。如果无痕下页面正常,说明问题一定出在常规模式下的某层缓存或状态污染——这时再针对性查 Cache-Control 响应头、检查 SW 更新逻辑、或确认是否有异常的 document.write 干扰了资源加载顺序。
容易被忽略的是:无痕模式下,某些 CDN 或代理仍可能返回旧资源,尤其当服务器设置了 Cache-Control: public 且未配 Vary: User-Agent 等字段时——此时问题不在你本地,而在服务端缓存策略本身。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











