在 URI 设计的位置段中支持 zeroconf 名称的最佳方法是什么?
RFC 3986(统一资源标识符(URI):通用语法)没有提到 zeroconf,我担心 URI 语法的设计目的不是超出 DNS 解析。
理想的答案语法将:
- 符合通用 URI 语法
- 处理带有多字节字符的 zeroconf 名称
以下是一些选项:
dnssd://local/_printer._tcp/Fancy printer/
dnssd://Fancy printer._printer._tcp.local
这些字符串是 IRI,而不是 URI,以解决 i18n 问题。
嵌套 URI 是另一种向后兼容的方法。嵌套的 URI 定义了用于发现协议(如 zeroconf)的位置。
参见“嵌套统一资源标识符”manuel urena 和 david larrabeiti
但是我没有发现这种方法被广泛使用的证据。
通用资源标识符是定位资源的通用方法。对于国际化,您可能需要检查 IRI,它几乎相同,但允许完全兼容 Unicode。它没有提到 Zeroconf 的原因是 URI 是一个通用协议。Zeroconf 可能使用 URI 作为其协议的一部分进行发现,但 URI 永远不会在其协议中使用特定实现(您也不会在其中找到 ftp:、https:、mailto:、skype: 等)
Zeroconf 是一种自动配置网络和发现可用服务的协议。它由三部分组成,地址选择(IPv4/6的一部分)、名称解析(mDNS)和服务发现(UPnP(微软)、DNS-SD(苹果))。现代操作系统开箱即用地支持所有这些。
如果我们采用 UPnP,则发现是基于 URI iirc 完成的。返回的信息以 XML 形式给出。XML 可以是任何 Unicode 编码。如果您是设备驱动程序制造商,则可以在其中放置任何字符。最后阶段可能是展示,它是一个 URL,但这是可选的。
一个 URI / URL 都支持国际化字符,但只转义而不在域名部分。
-- 亚伯 --