主机名以数字开头有效吗? 例如8 8server
从阅读RFC 1123看来,这是一个有效的主机名。 但是,我不清楚主机名是否只能以数字开头,例如8server.com
这个问题的由来是InternetDomainName.isValid("8server");
在谷歌Guava库( Javadoc )拒绝input。 我还在番石榴讨论小组上发表了一个具体的问题。
RFC 1123放宽了RFC 952的约束,RFC 952指定了由DNS替代的主机名服务器协议 (在RFC 953中描述)的遗留问题。 因此,完全数字的主机名对于每个RFC都是有效的。
RFC 1123本身讨论IP与主机名parsing的结果:
如果没有这样的识别分隔符可以input一个点分十进制数,那么必须进行全面的语法检查,因为主机域名的一个段现在允许以一个数字开头,并且可以合法地为数字 (参见第6.1节)。 2.4)。 但是,有效的主机名永远不能有点分十进制forms#。#。#。#,因为至less最高级别的组件标签是字母。
但是,由于实现问题,在RFC 1178准则中提供了select有效主机名的方法。 许多这些实现不能很好地识别数字主机名称,并且尽可能地将它们parsing为IP,直到它们包含至less一个非数字字符,而不pipe该位置如何。
另外,您会发现实现并不总是遵守RFC 952的其他原始约束,例如允许主机名以负号或句点结尾。
DNS保留了主机名的原始规范,并增加了对下划线的支持( RFC 2782 )。
更新根据评论的要求,澄清这个句子: 但是,一个有效的主机名不能有点分十进制forms#。#。#。#,因为至less最高级别的组件标签是字母的 。 这意味着顶级域名必须是字母 ,因此完全限定的主机名永远不能与IPv4地址混淆。 这个想法已经被RFC 3696澄清了,并且改为不是全部数字 。 注意略有差异。
原来主机名不能以数字或下划线( RFC 952 )开头,但是新规范RFC 1123,正如你所提到的那样,允许它。
关于对isValid()的调用,在这种情况下,完整的域名应该通过parameter passing: InternetDomainName.isValid("8server.com");