短网址还原
展开 bit.ly、t.co、tinyurl 等短网址,在不点开的情况下看到完整目的地,以及中间经过的每一次转址。
这个工具需要服务器。浏览器不被允许在不跟随跳转的情况下读取跳转结果,所以由我们的服务器代为追踪并回报。只有你粘贴的网址会被送出,不会被保存,另一端的网页内容也不会被下载。
这个工具做什么
短网址本身什么都没告诉你。bit.ly/3xKp2Qm 不论指向新闻、购物网站,还是一个想骗走你密码的页面,看起来都一模一样。把它贴到上面,这里会代你追踪下去,列出它经过的每一个位址与最后的落点——而你的浏览器一次都不必真的造访。
中间的路径和目的地同样重要。一个连结若在抵达之前绕过四个不同网域,行为就和直接跳过去的连结不一样;而这件事在你直接点下去的时候是看不到的。
为什么浏览器做不到
本站其他工具都完全在你的浏览器里执行,只有这一个不行,原因值得了解。
当网页请求一个网址并要求浏览器不要跟着转址时,拿回来的是规范所称的「不透明」回应:一个封起来的物件,读不到状态码、读不到标头,也读不到目的地。而如果你改让浏览器跟着转址,你就已经造访了那个连结——那正是你原本想避免的事。
这道限制不是疏漏。少了它,你打开的任何一个网页都能把你的浏览器当成入口,悄悄探测你家网络上的每一个位址。所以这件事只能在浏览器以外的地方做,在这里就是由我们的服务器代为执行,再把看到的结果回报给你。
什么会被送出,什么不会
只有你贴上的网址。它只用来发出请求,不会被写进我们的任何纪录或数据库。
另一端的网页内容完全不会被下载——HTML 不会,图片不会,什么都不会。服务器只询问每个位址的状态,并读取指出下一站的 Location 标头。因此目的地网站会看到一个请求抵达,但除了一个数字和一个位址之外,没有任何东西回到这里。
这里看不到的转址
追踪路径指的是追踪 HTTP 转址——服务器回传的 301、302、307、308。有些连结的转址则藏在网页里面:
- meta refresh:写在 HTML 中的
<meta http-equiv="refresh">。 - JavaScript 转址:必须有真正的浏览器执行那段程序才会发生。
- 中间页:要你先点过警告或广告,目的地才会出现。
这三种情况下,这里的路径会停在那个藏着机关的页面,而不是最终位址。这件事本身就是讯号:一个短网址服务若停在陌生网域并回传 200 而不是继续转址,就做了单纯的短网址服务不需要做的事。
连结也可能是因人而异的。有些服务会依国家、装置或时段送出不同的目的地。我们的服务器位在数据中心而不是手机上,所以一个专门对行动装置显示某个结果、对其他人显示另一个结果的连结,你在这里看到的会是后者。
路径中会出现的状态码
| 代码 | 含义 |
|---|---|
301 | 永久移转——连结有了新家时的标准转址 |
302 | 暂时转址,也是多数短网址服务实际使用的 |
303 | 改看其他资源,通常出现在表单送出之后 |
307 | 暂时转址,并保留原本的请求方法 |
308 | 永久转址,并保留原本的请求方法 |
200 | 路径的终点:这个位址直接回应了,没有再往前送 |
404 | 什么都没有。过期的短网址常落在这里 |
403 / 405 | 该位址拒绝了请求,有时是因为它挡掉自动检查,而不是连结失效 |
不会被展开的位址
这里只追踪公开的网络位址。如果一个连结——或它中间任何一次转址——指向内部网络,追踪会就此停下并告诉你,而不会去连。这包括 127.0.0.1 这类回送位址、192.168.x.x 与 10.x.x.x 等私有范围、云端服务用来存放机器凭证的 169.254.169.254 这类链路本地位址,以及只在内部网络才解析得到的名称。
短网址指向这些位址不会是失误,而是有人想利用公开工具去碰他自己碰不到的地方。非网页的协定、指定连接埠的连结,以及指回本站的连结,也基于同样理由一律拒绝。
短网址不是唯一的把戏
展开连结能告诉你它去哪里,但不能告诉你那里安全。拿到位址后有两件事值得检查:
- 网域要从右边读起。 在
paypal.com.secure-login.example里,真正的网站是example,前面全是装饰。第一个斜线之前的最后两段才是重点。 - 留意长得很像的字元。 网域可以包含其他文字系统的字母,看起来几乎和拉丁字母一模一样。如果一个网域看起来没问题,但你是从一则意料之外的讯息点过去的,请自己把网址打一遍,不要跟着连结走。