主机名以数字开头有效吗?

主机名以数字开头有效吗?

主机名以数字开头是否有效?例如8server

从阅读RFC 1123看起来这是一个有效的主机名。但是,我不清楚主机名是否只能以数字开头且有后缀,例如8server.com

这个问题的起源是InternetDomainName.isValid("8server");在Google Guava库中(Javadoc)拒绝输入。我还在Guava 讨论团体。

答案1

RFC 1123放宽了 RFC 952 的限制,该限制规定了主机名服务器协议(描述于RFC 953) 被 DNS 取代。因此,根据这些 RFC,完全数字的主机名是有效的。

RFC 1123 本身讨论了 IP 与主机名解析的后果:

如果可以在没有此类标识分隔符的情况下输入点分十进制数,则必须进行完整的语法检查,因为一段主机域名现在可以以数字开头,并且可以合法地完全由数字组成 (参见第 6.1.2.4 节)。但是,有效的主机名绝不能采用点分十进制形式 #.#.#.#,因为至少最高级别的组件标签是字母。

然而,它被规定在RFC 1178由于实现问题,选择有效主机名的指导原则。许多此类实现无法很好地识别数字主机名,并尝试将其解析为 IP,直到它们包含至少一个非数字字符,无论位置如何。

此外,您会发现实现并不总是遵守 RFC 952 的其他原始限制,例如允许主机名以减号或句点结尾。

DNS 保留了主机名的原始规范,并增加了对下划线(RFC 2782)。

更新根据评论的要求,澄清以下句子:但是,有效的主机名绝不能采用点分十进制形式 #.#.#.#,因为至少最高级别的组件标签将是字母。这意味着顶级域名必须是字母的,因此完全限定主机名绝不会与 IPv4 地址混淆。这个想法已由RFC 3696对于 DNS 并更改为并非全是数字.请注意细微的差别。

答案2

最初主机名不能以数字或下划线开头(RFC 952),但正如您所提到的,新规范 RFC 1123 允许这样做。

关于对 isValid() 的调用,在这种情况下,应该在参数中传递完整的域名:InternetDomainName.isValid("8server.com");

答案3

是的。RFC 1123 明确允许这样做,以下是示例:

http://9292.nl/

这是荷兰公共交通的路线规划器。

相关内容