游客发表
页面自己跳走的为什网页那一刻,你正看到一半。动跳手指没动,为什网页鼠标没点,动跳屏幕却已经换了一副面孔。为什网页这种事几乎每天都在发生,动跳大多数人骂一句"什么破网站"就关掉了,为什网页很少有人停下来想:它到底凭什么替我做决定?动跳
答案藏在服务器返回的那一行代码里。HTTP 协议中有一个状态码叫 301,为什网页还有一个叫 302。动跳它们的为什网页作用简单粗暴——告诉浏览器:"你要的东西不在这儿了,去另一个地址拿。动跳"浏览器收到这个指令,为什网页二话不说就执行。动跳整个过程不需要经过你同意,为什网页因为它被设计成"透明"的。早期互联网地址经常变动,网站搬家是常事,没有这套机制,每换一次域名就得通知所有用户手动改书签,那不现实。
但问题在于,这套原本用于"搬家通知"的机制,后来被用到了别的地方。
我去年帮朋友查一个域名,在浏览器里输入地址,按下回车,页面闪了一下就跳到了一个博彩网站。朋友以为是自己输错了,又试了一次,还是一样。我打开开发者工具看了一眼网络请求,发现原始域名返回了一个 302,目标地址指向一个完全无关的站点。这就是典型的域名劫持——有人控制了那个域名的解析权,把所有访问者直接倒手卖给了出价最高的人。
另一种更常见的情况是短链接。你在微博或微信里点开一个 t.cn 或 dwz.cn 开头的链接,浏览器先请求短链接服务器,服务器返回一个 301 或 302,附带真实地址,浏览器再跳过去。这个过程中间发生了什么,你完全看不到。短链接服务商知道你点了什么、什么时候点的、用的什么设备。这些数据本身就是生意。
页面内跳转则是另一回事。HTML 里有个标签叫 <meta http-equiv="refresh">,写在网页的头部,可以设定"3 秒后跳到另一个页面"。很多钓鱼网站用这招:先给你看一个正常的登录界面,你还没来得及细看,3 秒一到,页面刷新成一个几乎一模一样的假登录页。地址栏变了,但你的注意力还在输入框上。
JavaScript 也能干这事。一行 window.location.href = "..." 就够了。有些网站用它来做"检测到您已登录,正在跳转",有些弹窗广告用它来强制你打开一个新页面。区别只在于写代码的人想干什么。
那有没有办法拦住?有,但不多。浏览器的开发者工具里可以勾选"禁用 JavaScript",不过大多数现代网站没了 JS 直接白屏。Chrome 有一个实验性功能叫"阻止跳转",藏在设置深处,默认关闭。更实际的做法是装一个重定向追踪类的扩展,它会在跳转发生前弹一个提示,让你决定要不要跟过去。
我自己养成了一个习惯:在地址栏看到链接跳转时,先按 Esc 键。大多数浏览器会中止正在进行的跳转,停在当前页面。这个操作十次里能成功七八次,剩下两三次是服务器端直接返回了 301,浏览器在收到响应的那一瞬间就已经开始加载新页面了,Esc 来不及。
说到底,自动跳转本身是个中性工具。搬家用它,短链接用它,广告追踪用它,钓鱼网站也用它。区别不在于技术,在于谁在用、用来干什么。浏览器把执行权交给了服务器,而你作为用户,能做的只是在它跳走之前,尽量看清它要带你去哪儿。
友情链接