304 not modified 是缓存验证成功的表现,并非错误;但当服务端已更新而页面仍卡在旧版本,说明浏览器固执复用过期缓存,需通过硬重载、清空缓存并重载、禁用缓存或清除网站数据(含service worker)主动打破。

当你在Chrome中反复看到“304 Not Modified”却页面样式错乱、JS未生效或控制台日志不出现,说明浏览器正固执地复用过期缓存——它没发新请求,只校验“有没有改”,而服务器答“没改”,于是你卡在旧版本里。这并非错误,而是缓存机制的默认行为,必须主动打破。
识别304是否真导致问题
打开开发者工具(F12)→ 切换到 Network 面板 → 刷新页面 → 找到 main.css 或 app.js 这类关键资源 → 查看 Status 列。若显示 304 且右侧 Preview/Response 为空,同时修改已部署但未生效,即可确认是缓存锁定问题。
注意:仅 Network 面板显示 304 不代表一定异常;若资源确实未变更且功能正常,304 是高效行为。只有当你明确知道服务端已更新却仍被拦截时,才需干预。
立即跳过验证,强制获取全新资源
方法一:快捷键硬重载(最常用)
Windows/Linux 按 Ctrl + Shift + R;macOS 按 Cmd + Shift + R。此操作绕过所有缓存策略,向服务器发起无条件 GET 请求,返回必为 200 和完整响应体。
方法二:地址栏刷新图标右键菜单
确保开发者工具未关闭 → 将鼠标悬停在地址栏右侧的圆形刷新按钮上 → 右键 → 选择【清空缓存并硬性重新加载】。该操作会先同步删除内存缓存、磁盘缓存、Service Worker Cache,再发起全新请求,比快捷键更彻底。
方法三:Shift + 点击刷新图标
直接按住 Shift 键不放 → 用鼠标左键点击地址栏右侧刷新按钮 → 松开 Shift。此操作等效于 Ctrl+Shift+R,适合键盘不便或快捷键被其他软件劫持的场景。
让后续所有请求都绕过缓存(调试专用)
第一步:按 F12 打开开发者工具
第二步:切换到 Network 面板
第三步:勾选顶部的 Disable cache (while DevTools is open) 复选框
第四步:关闭开发者工具前,所有页面跳转、AJAX 请求、iframe 加载均不再读取任何缓存,全部直连服务器
⚠️ 注意:该设置仅在开发者工具开启期间生效,关闭即失效;但它对 Service Worker 缓存无效——若页面注册了 SW,仍需额外处理。
精准清除当前网站全部本地数据(含 Service Worker)
第一步:在 Chrome 中打开问题网站,确保页面完全加载
第二步:点击地址栏左侧锁形图标(HTTPS)或“i”图标(HTTP)
第三步:在弹出面板中点击【网站设置】
第四步:滚动到底部,在“隐私和安全”区域点击【清除数据】
第五步:确认弹窗中点击【清除】
这一步会一次性删除该域名下的缓存文件、Cookie、LocalStorage、IndexedDB、Web SQL 和已激活的 Service Worker——这是解决因 SW 拦截导致 304 持续返回 from cache 的唯一可靠路径。
手动触发 Service Worker 更新与缓存清理
第一步:打开开发者工具(F12)→ 切换到 Application 面板
第二步:左侧边栏点击【Service Workers】
第三步:勾选【Update on reload】(强制每次刷新检查新版本)
第四步:点击右侧【Unregister】按钮移除当前注册的 SW
第五步:刷新页面 → 浏览器将重新注册新版 SW(如有),或完全不注册(如已移除 sw.js)
若你的项目使用 Workbox 或自定义缓存策略,这一步能确保 caches.delete() 被执行,旧缓存条目被真正释放,而非仅“不可见”。











