追踪 Safari 搜索点击的重定向链路
一次搜索点击可能在到达页面之前经过重定向器、同意页或登录。把点击的链路与直接访问作对比,并指出失败的那一环。
搜索结果很少直接链接到它所指向的页面。一次点击可能经过重定向器、同意中间页或登录服务,每一跳都是可以单独失败的独立请求。Safari 的 Network 标签能让这一序列保持可见,但前提是你在点击之前就开始记录。真正有用的证据是第一个失败的 URL,而不是结果里显示的那个地址。
在点击之前开始抓包
在该标签页打开 Web Inspector,并在触碰搜索结果之前切到 Network。开启 Preserve Log,让列表在替换页面的导航之后仍然保留。清除已有条目,然后只点一次。页面加载之后才开始的抓包,已经丢掉了你需要的那条请求。
使用不含隐私数据的页面,并在整个对比过程中保持浏览器配置文件和 VPN 状态不变。中途改动其中任何一项,两条路径就不再可比。
按顺序读取重定向
从上到下读取各行并跟踪状态码。Location 指向另一台主机的 301 或 302 是一跳,而不是终点。紧随其后的请求是一次新的导航,带有自己的名称解析、TLS 握手和策略检查。数一数在内容到达之前这次点击触达了多少台主机。
WebKit 的 Network 标签指南 记录了请求记录与 Preserve Log 选项的行为方式,在解读稀疏列表之前值得一读。缺失的行通常意味着抓包开始得太晚,或某个 service worker 从缓存作出了响应,而不是浏览器跳过了一跳。
与直接导航对比
在相同的配置文件和网络下,对预期的最终页面做第二次访问,直接输入或粘贴。从两条列表开始分歧的第一行进行对比。如果点击路径在直连路径从未接触的中间环节失败,问题就在那个中间环节。如果两者都到达同一 origin,只有一方被拒绝,账户状态或请求细节是更好的线索。
把两次抓包与时间戳并排放置。时间差异并不是因果的证明,但能缩小下一步该查哪个服务。记下每个失败行属于哪台主机,因为同一个浏览器症状在不同阶段归属不同。如果直接访问也失败,点击路径就不是区分因素。
精确命名失败阶段
行内的错误文本比“网站被封锁”这种笼统说法更具体。名称解析失败、连接始终无法完成、TLS 错误和 HTTP 状态是四个不同阶段,分属四个不同的责任方。用文字记录那个阶段而不是笼统的失败,升级对象就变得清楚。
| Stage | What the row shows | Who owns it |
|---|---|---|
| Name resolution | No address, request never starts | Resolver or local DNS policy |
| Connection | Address known, transport never completes | Route, firewall or upstream reachability |
| TLS | Handshake error or certificate warning | Interception, clock or certificate trust |
| HTTP | A status code comes back | Origin, gateway or account policy |
Ping 和 traceroute 可以补充关于主机的线索,但它们不会重放浏览器的重定向链,也不能证明 HTTPS 请求成功。对主机的成功 ping 甚至可能与同一主机上的 TLS 错误并存。把网页请求记录作为主要证据,把之后的网络测试视为辅助细节。
分享追踪而不泄露令牌
在导出或粘贴追踪之前,复查每个 URL、请求头和查询参数。重定向链常常携带会话标识、电子邮件地址、同意状态或签名链接。替换或裁剪这些值,只保留调查真正需要的 origin、状态和时间。
交付第一个失败的请求、它之前的一跳以及重定向状态码。这三项能让下一个人复现你的路径,而无需读取完整追踪或触碰账户。