用死链扫描工具查出的 404、超时或跳转异常,有一部分并不是服务器真实状态,而是扫描链路或中间层缓存返回的旧结果。排除缓存假象的核心做法是:对可疑 URL 追加一次性查询参数强制回源,再用不同网络与不同工具交叉验证,最后以源站访问日志和响应头作为判断依据。
缓存假象通常有几种表现:同一批 URL 连续扫描,两次结果不一致;扫描工具报 404,但浏览器直接访问正常;页面已恢复,工具仍报超时或 5xx;状态码正常但返回的是旧版内容。这些现象的共同点是“扫描端看到的结果”和“源站当前状态”不一致。
需要区分“可能原因”和“已经定位的原因”。CDN 边缘节点缓存、反向代理缓存、DNS 解析到不同节点、扫描工具自身的请求缓存,都可能产生上述现象,但不能仅凭一次异常就断定是缓存问题。判断的关键是看响应头中是否带有缓存命中标识,以及同一 URL 在不同节点上的返回是否一致。
最直接的一步是给 URL 加一个每次不同的查询参数,绕过按完整 URL 缓存的中间层。例如原地址是:
https://example.com/page
改为:
https://example.com/page?cachebust=20240613a
每次更换参数值再请求。如果加参数后返回 200,而不加参数仍返回 404,说明中间层很可能缓存了旧的错误响应。如果加参数后依然 404,则更可能是源站本身的问题,缓存嫌疑下降。
适用条件:该方法对按完整 URL 做键的缓存有效;如果中间层忽略查询参数或按路径缓存,效果会打折扣,此时需要改用其他手段,比如直接请求源站 IP 并带上 Host 头,或从不同地理位置的节点分别请求。
发现疑似缓存假象后,常见两种处理路径:
选择依据:如果你对缓存层有操作权限,且异常集中在少数 URL,方案一更快;如果异常量大、涉及多方协作,或你不确定缓存层归属,先用方案二定位,避免误清缓存掩盖真实故障。
处理之后需要复查,判断缓存假象是否真正消除:
如果复查后仍不一致,说明问题可能不在缓存,而在 DNS 解析差异、防火墙策略或源站配置,需要换方向排查。
第一,robots.txt 的抓取限制不等于索引移除,也不等于缓存控制。它影响的是爬虫能否抓取,不能用来解释死链扫描工具返回的缓存结果。第二,站点地图不保证收录,也不影响扫描工具对单个 URL 状态的判断。把这两者和缓存问题混在一起,会让排查方向跑偏。
下一步:挑出扫描结果中反复出现异常的 3 到 5 个 URL,按上面的加参数方法逐个验证,记录带参数与不带参数的状态码差异,再决定是否需要清缓存。