摘要

  • 2026 年 10 月 1 日提交的 at URI 首版草案明确写道:把含多个冒号的 DID 放进 // 后面的 authority,会越出 RFC 3986 的通用语法,因此这一版不能按 RFC 7595 取得永久登记。
  • IANA 早在 2023 年就把 at 列为 provisional。临时登记证明命名空间里有这一行,不等于 IETF 已正式审查,也不证明通用解析器、身份解析、仓库定位、记录内容和业务结果已经收敛。

真正值得管理层注意的,不是一个实验标识符突然撞上标准,而是一个已经工作的标识符主动把自己的制度边界写进草案。

draft-newbold-atp-aturi-00 的日期是 2026 年 10 月 1 日。文首写着 Standards Track 意向,冻结的 Datatracker 记录却仍把它放在 Individual Submissions,stream、state 和标准等级均为空。这是第 00 版 Internet-Draft,不是 RFC,不是 IETF 共识,更不是永久登记已经遭拒或获批的记录。

at:// 的任务很具体:引用 Authenticated Transfer Protocol 的账户和数据记录。authority 可以写便于人阅读的 handle,也可以写永久账户标识。路径再放 collection 和 record key。系统由此找到一个逻辑记录。

矛盾发生在永久标识这一侧。DID 通常长得像 did:plc:…,内部有多个未转义冒号。RFC 3986 把 authority 统一拆成可选 userinfo、host 和可选 port;RFC 7595 又规定,新方案不能重写 URI 总体语法。首版草案因此直说:把这种 DID 放在带 // 的 authority 里,不符合通用规则,当前版本不具备永久登记资格。

这句话没有否定运行现实。专用解析器完全可以把 authority 当成不透明的身份字符串,继续完成解析、仓库发现和取数。它否定的是一条更大的推断:既然应用能用,通用 URI 生态就已经接受了它的结构。运行成功与永久登记回答的是两道题。

IANA 记录恰好把中间层展示出来。at 自 2023 年 6 月 1 日起就是 provisional URI scheme。RFC 7595 允许已经在单一机构之外使用、但尚未成为标准的方案先做临时登记,程序是 First Come First Served。永久登记则进入 Expert Review,并要满足通用语法和其他长期条件。

at 条目旁的专家说明更不能被截成一句宣传。它说临时登记没有经过 IETF 正式审查,也不是 IETF 对开放互联网普遍使用的推荐;它还记录了短名称 at 可能与日常用法混淆,曾有人建议 atproto 或 atp。这可能成为未来永久申请的障碍。但说明同时强调,它本身并不构成 IETF 或 IANA 的立场。

因此至少要保存四条状态:协议已被使用;IANA 有临时登记;第 00 版草案提出 Standards Track 意向;该版语法本身尚不符合永久登记条件。把它们压成“已标准化”会虚构权威;把它们压成“不能使用”又会抹掉运行事实。

身份链也不允许压缩。handle 是人读入口,不是永久主体。官方文档警告,handle 可以改绑到另一个 DID,被复用后,旧 at:// 可能转向另一个仓库。草案因此要求:handle 形式若要长期保存,应先解析成永久账户标识;记录内部应使用永久标识。

永久账户标识仍不等于物理位置。AT URI 的 authority 指向账户身份,不一定是托管仓库的网络主机。解析服务再找到 PDS 或其他仓库端点。collection 与 record key 找到逻辑记录,但记录内容会更新或删除。AT URI 不是内容寻址;需要强引用时,官方实现指南建议另带 CID 哈希。

这就形成一条不能省略的凭证链:输入采用哪一版 URI profile;哪个解析器及版本处理了它;输入是 handle 还是 DID;handle 在何时解析成哪个 DID;身份解析到哪个仓库;取回哪个 collection、key 和记录修订;是否另有 CID 绑定实际字节;应用最终执行了什么。解析成功只是第二步,不是第八步。

解析器兼容性也要按证据口径报告。AT Protocol 文档列举 Python urllib 与 JavaScript url-parse 可用,并说 Go net/url 及多数常见 Rust URL crate 不能直接处理这种 authority。这是有价值的实现提示,却不是覆盖所有版本、绑定和应用的独立普查。生产环境必须记录自己跑过的结果。

Heng Lu 的 Running-Code Primacy 不让制度标签否定已经工作的系统,也不允许运行代码冒充制度授权。Minimum Initial Specification 要求共同层只固定必要不变量:handle、永久账户身份、仓库位置、逻辑记录和内容哈希必须分开。Reality Layers 则提醒我们,IANA 行、解析成功、字节取回和用户结果属于不同现实层。

这篇文章的结论不是“标准高于实践”,也不是“实践可以跳过标准”。它要求每一层只对自己的事实负责:协议定义命名,IANA 记录登记状态,专家审查判断提交的语法,运行系统证明解析与取数,业务应用决定何种证据足以触发行动。

来源