搜索结果很少直接链接到它所指向的页面。一次点击可能经过重定向器、同意中间页或登录服务,每一跳都是可以单独失败的独立请求。Safari 的 Network 标签能让这一序列保持可见,但前提是你在点击之前就开始记录。真正有用的证据是第一个失败的 URL,而不是结果里显示的那个地址。

在点击之前开始抓包

在该标签页打开 Web Inspector,并在触碰搜索结果之前切到 Network。开启 Preserve Log,让列表在替换页面的导航之后仍然保留。清除已有条目,然后只点一次。页面加载之后才开始的抓包,已经丢掉了你需要的那条请求。

使用不含隐私数据的页面,并在整个对比过程中保持浏览器配置文件和 VPN 状态不变。中途改动其中任何一项,两条路径就不再可比。

按顺序读取重定向

从上到下读取各行并跟踪状态码。Location 指向另一台主机的 301 或 302 是一跳,而不是终点。紧随其后的请求是一次新的导航,带有自己的名称解析、TLS 握手和策略检查。数一数在内容到达之前这次点击触达了多少台主机。

WebKit 的 Network 标签指南 记录了请求记录与 Preserve Log 选项的行为方式,在解读稀疏列表之前值得一读。缺失的行通常意味着抓包开始得太晚,或某个 service worker 从缓存作出了响应,而不是浏览器跳过了一跳。

与直接导航对比

在相同的配置文件和网络下,对预期的最终页面做第二次访问,直接输入或粘贴。从两条列表开始分歧的第一行进行对比。如果点击路径在直连路径从未接触的中间环节失败,问题就在那个中间环节。如果两者都到达同一 origin,只有一方被拒绝,账户状态或请求细节是更好的线索。

把两次抓包与时间戳并排放置。时间差异并不是因果的证明,但能缩小下一步该查哪个服务。记下每个失败行属于哪台主机,因为同一个浏览器症状在不同阶段归属不同。如果直接访问也失败,点击路径就不是区分因素。

精确命名失败阶段

行内的错误文本比“网站被封锁”这种笼统说法更具体。名称解析失败、连接始终无法完成、TLS 错误和 HTTP 状态是四个不同阶段,分属四个不同的责任方。用文字记录那个阶段而不是笼统的失败,升级对象就变得清楚。

StageWhat the row showsWho owns it
Name resolutionNo address, request never startsResolver or local DNS policy
ConnectionAddress known, transport never completesRoute, firewall or upstream reachability
TLSHandshake error or certificate warningInterception, clock or certificate trust
HTTPA status code comes backOrigin, gateway or account policy

Ping 和 traceroute 可以补充关于主机的线索,但它们不会重放浏览器的重定向链,也不能证明 HTTPS 请求成功。对主机的成功 ping 甚至可能与同一主机上的 TLS 错误并存。把网页请求记录作为主要证据,把之后的网络测试视为辅助细节。

分享追踪而不泄露令牌

在导出或粘贴追踪之前,复查每个 URL、请求头和查询参数。重定向链常常携带会话标识、电子邮件地址、同意状态或签名链接。替换或裁剪这些值,只保留调查真正需要的 origin、状态和时间。

交付第一个失败的请求、它之前的一跳以及重定向状态码。这三项能让下一个人复现你的路径,而无需读取完整追踪或触碰账户。

相关文章