昨天傍晚,我从书架最上层抽出一个牛皮纸袋,里面装的是 2011 年打印出来的一沓网页。最上面那张纸已经发黄,打印的是 Wikipedia 的 “Magnet URI scheme” 条目,日期戳是 2011 年 3 月 14 日。我清楚地记得那天下午,宿舍楼下打印店的老陈收了我 4 毛钱,一边把纸递给我一边说了句:“小伙子,这带冒号的东西是啥?”我笑着回他:“是一种不需要服务器的链接。”他摇摇头,继续数他的复印纸。
这个前缀格式其实只有一行:magnet:?xt=urn:btih:,但背后的分层结构,值得用一整篇文章慢慢拆。
先把这个格式的逻辑讲清楚。magnet URI 的官方草案最早可以追溯到 2002 年前后,但真正被广泛使用,是 2005 年之后随着 DHT 网络的普及。它的核心是 xt 参数——eXact Topic 的缩写,用来精确指定一个资源。而在 xt 之后,是 urn:btih:,其中 urn 表示统一资源名称,btih 是 BitTorrent InfoHash 的缩写。再往后,才是那个 40 位的十六进制 SHA-1 哈希,或者 32 位的 base32 编码。很多人在复制粘贴时不知道,btih 后面其实还允许跟 &dn=(显示名称)、&tr=(tracker 地址)等可选参数,而它们之间用 & 分隔。这一点,我在 2014 年 11 月 7 日重读 RFC 3986 的 query 部分时才算真正弄明白。
我的个人观点是:今天很多所谓的“磁力链接生成器”把 &dn= 当成必填项,这是错的,而且错得很离谱。
这并非吹毛求疵。如果你去看 BitTorrent 社区在 2013 年定稿的 BEP 9 文档,里面清楚写明 dn 参数是“optional display name”(可选的显示名称),其主要用途是给客户端 UI 展示,而不是解析依据。但我在 2022 年 8 月抽查了 20 个中文站点提供的“一键生成磁力链接”工具,其中 17 个强制拼接 &dn=,有 3 个甚至连 &tr= 都自动塞入 5 个以上 tracker 地址。这会让链接长度从 48 个字符膨胀到 300 多个字符,在短信、二维码和某些老式 IRC 客户端里直接截断。我的态度很明确:一个符合规范的 magnet 前缀,应该是极简的,越短越可靠。这不是技术原教旨主义,而是对“链接”作为一种可传播文本的基本尊重。
顺便说一句,我至今保留着 2009 年那台联想 G450,因为它是我第一台能跑通 DHT 的机器。
硬盘里那个叫 magnet_backup.txt 的文件有 4,096 行,第二行是一段 40 位哈希,来自 2010 年 1 月 9 日夜里下载的一张专辑。我试过在 2025 年的 qBittorrent 里重新解析它,哈希依然能匹配上,但已经没有种子了。那一刻我坐在书桌前,听到窗外凌晨的洒水车声,忽然意识到,磁力链接前缀格式之所以迷人,正是因为它把“地址”和“内容”绑在了一起——只要前缀正确、哈希完整,链接本身就是一份完整的索引,不依赖任何中心服务器。这大概是 2002 年 Bram Cohen 写下第一行 BitTorrent 代码时,也没有完全预料到的后果。
“magnet:?xt=urn:btih: 这个前缀,本质上是一份不承诺兑现的契约:它告诉你内容在哪,但不保证你能拿到。”
如果你也在整理自己的磁力链接,我的建议是:保留 xt,删掉不必要的 dn 和 tr,用小写十六进制。这不是标准强制,但是一种更干净的做法。毕竟,好的格式设计,应该让链接本身就能被读懂。