AICENT.COM
← 返回中文博客

规范化还是拒绝:一个地址只能有一种写法

2026-10-17 · RTTP · IQA
规范解读 · 第 2 篇 · 引证源:draft-li-rttp-iqa-addressing-00 §4.2 / §8 · 姊妹柱:rttp://(CRI 27)· iqa://(CRI 28)

派生寻址有一切传统寻址没有的软肋:地址是权威字符串的确定性函数,那么「同一个地址的两种写法」就不是风格问题,是正确性问题——两种写法意味着两个派生输入,两个输入意味着两个地址,一个「主体」被静默劈成两个。这就引出本文要回答的问题:怎么保证唯一写法?

我们的答案写在 §4.2,方向与整个 URI 生态相反:「规范形式是小写 US-ASCII。大写是无效输入,不是格式差异:解析器不得将其规范化,因为两个不同的字符串会因此映射到同一个地址。」§8 把同一立场延伸到国际化:「客户端不得把 Unicode 标签映射到其 ASCII 形式(例如大小写折叠或 IDNA 式变换)以求接受之」——理由同样直白:没有主机要解析,就不需要标签到 ASCII 的变换,而允许一种变换,就是引入第二种写法。

主流生态的宽松规范化(大小写折叠、百分号解码、IDNA)是为「联系一台主机」这个用途服务的:多一种写法,多一分用户容错。派生寻址的用途不是联系主机,而是派生一个必须全网一致的路由值——容错的每一分便利,都直接变成派生输入的分叉。所以规范化的常规工具在我们这里全部变成攻击面:折叠一次大写,就打开一条「两个字符串、一个地址」的通道。

于是规则只有一条,且是 MUST NOT 级别:解析器永不修复输入。畸形输入被拒绝,而不是被「好心」纠正。这与整套规范的 fail-closed 立场同源(§1:「非合规输入被拒绝,永不修复」)——修复是解析器的傲慢:它假定自己知道输入者真正想写的是什么;在寻址语境里,这个假定就是冒充的入口。

代价是什么?用户必须写对小写。我们认为这笔代价是划算的:写错的结果不是静默错路由,而是一次显式拒绝——错误在进入派生之前就被挡住,永远到不了账本上。

一句话:宽松规范化买来容错,卖掉唯一性;我们卖掉容错,买回「一个地址只有一种写法」这条数学事实——对派生寻址而言,后者不是风格,是正确性本身。