当死链检测工具把某个URL判为正常、而真实用户点击后却看到错误页时,先不要认定工具或用户有一方在说谎。更常见的情况是:工具请求和用户请求在解析路径、身份状态、缓存层上走的是不同分支。要复现问题,必须把用户那一侧的请求条件搬到可重复的测试里,而不是反复刷新工具结果。
工具能访问、用户失败,通常落在两类原因里。第一类是服务端对同一URL返回了不同结果,例如按UA、Cookie、Referer、地域或请求头返回不同状态码;第二类是服务端结果一致,但用户侧在到达服务端之前就失败了,例如DNS解析到旧IP、CDN边缘节点缓存了过期错误页、浏览器插件拦截、或本地网络对特定域名做了阻断。
这两类解释对应完全不同的下一步。如果你把第二类问题当成第一类去查服务器日志,会看到大量200记录,从而得出“没有问题”的错误结论;反过来,把第一类问题当成用户网络问题,会让真实存在的分支错误长期潜伏。
区分的关键是:让工具发出的请求尽量接近用户请求,同时记录请求真正到达了哪里。可以按下面的顺序收集证据,每一步都留下可对比的记录。
这些证据指向不同结论:状态码随请求头变化,说明服务端存在分支逻辑;状态码一致但IP不同,说明问题在解析或分发层;浏览器失败而命令行正常,说明问题在客户端。
假设某页面在检测工具里返回200,但登录用户点击后看到404。可以这样设计对照实验:
这个例子的假设是:工具默认以匿名身份请求,而用户处于登录态。实际排查时,身份、地域、UA都可能成为分支变量,需要逐个固定、逐个放开,才能定位是哪一个条件触发了失败。
一旦能在受控条件下稳定复现失败,下一步就不再是“再跑一遍工具”,而是把复现条件交给对应环节处理。如果失败由身份分支引起,需要检查路由或权限配置;如果由缓存引起,需要确认缓存键是否包含了不该忽略的请求头;如果由解析引起,需要核对DNS记录和CDN回源配置。
如果始终无法复现,也不等于问题不存在。此时应记录用户侧的时间、网络、浏览器和状态码,并观察该URL在日志中是否出现过非200记录。请求量或抓取量归零不能单独证明处理正确,因为采样范围、日志保留周期、用户实际访问路径都可能造成同样的现象。只有把用户侧证据和服务端日志对齐,才能判断是问题已消失,还是只是没被观测到。
给开发或运维交接时,附上三样东西比口头描述更有效:完整的请求头与响应头、失败时的远端IP、以及能稳定触发失败的最小步骤。这样对方不必猜测你用的工具或网络环境,可以直接在相同条件下验证。死链检查的价值不在于工具给出一个绿点,而在于你能解释这个绿点在什么条件下会变成红色。