用百度的抓取诊断工具测一条栏目页,返回「301 跳转超时」。在本地和服务器上 curl 同一个地址,都是立刻 200,没有任何跳转。换了几条地址结果一样,工具侧的问题看起来不像偶发。
一开始怀疑是「页面里有一段 JS 做过跳转,抓取工具把它记到了 301 上」,查了一圈,方向不对。
原因不止一个,得分开看。诊断节点走的是另一条线路,那条线路到源站要绕一个境外节点。另一种情况是CDN 按地域调度,部分节点返回的是 301 到备用源。
少数情况下是首字节时间超过工具阈值,被统一报成跳转超时。
从多个地区分别请求,看响应码和首字节时间是否一致
curl -s -o /dev/null -w '%{http_code} %{time_starttransfer}\n' https://www.example.com/list
接着检查 CDN 的区域调度配置有没有指向备用源
curl -sI https://www.example.com/list | grep -i -E 'server|x-cache|location'
然后确认页面里没有脚本跳转
curl -s https://www.example.com/list | grep -i 'location.href'
直接请求源站 IP,排除 CDN 因素
curl -s -o /dev/null -w '%{http_code} %{time_starttransfer}\n' -H 'Host: www.example.com' http://203.0.113.10/list
恢复的判定其实很直接。各节点返回的响应码统一为 200,首字节时间都在 300ms 以内,诊断工具里不再报跳转超时。
诊断工具的结果依赖它自己的出口网络,本地 curl 正常不代表全网正常,多节点对比比反复重测有用。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
