你有没有遇到过这种怪事:电脑能正常打开百度,在搜索框里输入关键词,点开结果页里的链接,却怎么也跳不过去,浏览器转圈老半天,最后显示网页无法访问。可你要是把那个网址完整地敲进地址栏,带上www和后缀,又能顺利打开。
最近我就是这样,一开始以为是浏览器出了问题,换了Chrome、Edge、Firefox都不行。又怕是DNS没配好,手动改成114.114.114.114和8.8.8.8,结果还是一模一样。百度的页面加载很快,搜索一下也流畅,唯独从百度点击外链这个动作,像被什么东西拦腰截断似的。
后来我仔细琢磨了一下,发现这个现象有个讲究:能访问的网站,全是那些域名解析正常、服务器地址明确的站点。而百度跳转出去的链接,走的是一条间接路径。百度不会直接把你带到目标网站,它在中间用一个叫跳转服务的机制,先记录你的点击行为,再让浏览器去访问一个以baidu.com开头的短链,最后才到真正的目的地。
问题就出在这两步之间。我的网络环境像是识别出了这条“中间人”路径,对从百度发起的跳转请求做了拦截,而直接访问目标站点则完全畅通无阻。等于说,只要我绕过百度,把那个真实URL敲进地址栏,一切正常。
我还试过用必应搜索和其他搜索引擎,更绝,搜索结果页干脆显示不全,部分图片都是裂的,哪怕能翻开正文,点击链接一样卡死。反倒是某些小众导航网站,上面挂的直达链接,点击后能直接打开——因为它们没有跳转中转,是纯粹的直连。

这事在网上搜一圈,发现不是我一个人遇到。有人在论坛里说是运营商搞的“白名单”策略,把一批域名做进DNS污染名单,而这个名单偏偏把百度的主站放行了,却掐断了所有经百度跳转出去的流量路径。有人说是路由器或光猫里被写入了自定义防火墙规则,专门封禁某类HTTP重定向行为,凡是响应头里带Location字段并且指向不属于收录域的,一律丢掉。
还有种更彻底的说法,这类环境跑的是“域名白名单制”,只有预先登记的域名才允许访问,而搜索引擎抓来的海量外部链接没被登记,所以从搜索引擎出去的访问全部被拒。这也能解释为什么直接输入域名可以通——因为那个域名恰好被允许了。
我随手做了个简单测试,拿百度的搜索框去搜一个IP地址能直接访问的站点,比如某个小型论坛,它的域名只申请了A记录没做HTTPS证书,用http明文能打开,从百度点进去就拒绝。再用另一个有备案、有证书的网站测试,百度跳转也一样被拦。反过来,在地址栏里敲同一个域名,秒开。这说明拦截的粒度不是网站本身,而是跳转这个动作。
那这种局面怎么破?试了一堆办法,最管用的是把百度的链接复制出来,取下它参数里的真实URL,粘贴到地址栏直接访问,能通。或者用带预解析功能的浏览器插件,跳过跳转层。还有人建议改hosts把百度跳转域名指向特定IP,让重定向直接发生在本地,不经过运营商校验,这个我没试,但逻辑上说得通。
说到底,这不是百度的问题,是网络环境给你戴了一副“只能按门牌号找人”的隐形眼镜,想靠搜索引擎里的传送门出门,门被焊死了。写这篇文章的时候,我又在地址栏里手动敲完一个域名,回车,顺利打开。回头看看,心里倒是庆幸,至少还有条路能走。