要快速定位过期仍被加载的静态资源,需在network面板启用size和cache-control列,筛选status为200、size为disk cache且cache-control含max-age=0的条目,并结合date/expires头与当前时间比对确认真实过期。

要快速定位网页中已过期却仍被浏览器加载的静态资源(比如图片、CSS、JS),必须绕过常规的“Network”标签页默认过滤逻辑,直接筛选出缓存失效但未被重新请求的文件。
打开开发者工具并启用缓存调试模式
按 F12 打开开发者工具 → 切换到 Network 标签页 → 右键点击顶部字段栏(如 Name、Status、Type)→ 勾选 Size 和 Cache-Control 两列。
这一步必须做,否则无法看到每项资源的缓存策略和实际缓存状态。缺了 Cache-Control 列,你根本分不清哪个是强制过期、哪个是启发式缓存。
刷新页面并筛选出“过期但仍在用”的资源
按 Ctrl+R(Windows/Linux)或 Cmd+R(macOS)硬性刷新页面,确保所有资源重新走一遍缓存判断流程。
在 Network 表格中点击 Size 列标题两次,让数据按大小倒序排列 → 滚动查看所有显示 disk cache 或 memory cache 且 Cache-Control 值为空、或含 max-age=0、或含 no-cache 的条目。
【关键识别点】:如果某资源的 Status 显示 200(而非 304),同时 Size 列写的是 disk cache,但 Cache-Control 栏明确写着 max-age=0,说明该资源已过期,浏览器本应发条件请求验证,却因服务端未返回 ETag 或 Last-Modified 而直接复用本地副本——这就是你要找的“过期但仍在用”的静态资源。
使用控制台命令辅助验证过期资源
方法一:在 Console 标签页中粘贴执行以下代码:
performance.getEntriesByType('resource').filter(r => r.transferSize === 0 && r.encodedBodySize > 0)
该命令会列出所有未发起网络传输(transferSize === 0)、但仍有内容体(encodedBodySize > 0)的资源,即纯缓存命中项;再结合上一步筛选出的 max-age=0 条目交叉比对,即可确认是否为过期复用。
方法二:执行 chrome.devtools.network.getHAR()(需先在设置中启用 HAR 导出支持)→ 复制返回对象 → 在编辑器中搜索 "cache":.*?"status": "200" 并排除含 "fromDiskCache" 为 false 的项。
注意:方法二仅在 DevTools 设置 → Preferences → Network 中勾选了 Save as HAR with content 后才有效,否则 getHAR() 返回的响应体为空。
定位具体过期资源的原始请求路径
第一步:在 Network 表格中找到一个疑似过期的资源(例如某 CSS 文件,Status 是 200,Size 是 disk cache,Cache-Control 是 max-age=0)→ 单击选中它。
第二步:右侧切换到 Headers 子标签 → 向下滚动到 Response Headers 区域 → 查看 date 和 expires 字段值。
第三步:用系统当前时间(2026年8月27日)减去 date 值,若差值超过 max-age 指定秒数,或 expires 时间早于当前时间,则该资源确属过期。
这一步不能跳过。很多开发者误以为 max-age=0 就等于“立刻过期”,其实它只表示“必须验证”,而验证失败时浏览器仍可能降级复用——只有比对 date 与 expires 才能确认真实过期状态。











