子域名(域名)可以_
在其中加下下划线吗?
这里给出的答案大多数都是假的.在域名中使用下划线是完全合法的.让我引用标准RFC 2181第11节"名称语法":
DNS本身仅对可用于标识资源记录的特定标签设置一个限制.该限制涉及标签的长度和全名.[...] DNS协议的实现不得对可以使用的标签施加任何限制.特别是,DNS服务器不得拒绝为区域提供服务,因为它包含某些DNS客户端程序可能无法接受的标签.
另请参阅原始DNS规范RFC 1034,第3.5节"首选名称语法",但请仔细阅读.
具有下划线的域在野外非常常见.检查_jabber._tcp.gmail.com
或_sip._udp.apnic.net
.
这里提到的其他RFC处理不同的事情.最初的问题是域名.如果问题是主机名(或URL,包括主机名),那么这是不同的,相关标准是RFC 1123,第2.1节"主机名和数字",它将主机名限制为字母 - 数字 - 连字符.
人们应该清楚定义.如下所用:
domain name是DNS数据库中资源的标识符
label是点之间的域名的一部分
hostname是一种特殊类型的域名,用于标识Internet主机
该主机受到的限制RFC 952和RFC 1123的轻微放松
RFC 2181明确指出域名和主机名之间存在差异:
... [事实]任何二进制标签都可以有MX记录并不意味着任何二进制名称都可以用作电子邮件地址的主机部分......
所以主机名中的下划线是禁止的,域名中的下划线是不行的.
在实践中,人们可能会看到带有下划线的主机名.正如" 健壮性原则"所说的那样:"在你所发送的内容中要保守,在你所接受的内容中保持自由".
在21世纪,事实证明主机名和域名可能会国际化!这意味着如果标签包含超出允许集的字符,则需要编码.
特别是,它允许一个编码_
的主机名(更新2017-07:这是值得怀疑的,看评论的_
.还是不能在主机名中使用实际上,它甚至不能在国际化标签使用)
国际化的第一个RFC是2003年3月的RFC 3490,"将应用程序中的域名国际化(IDNA)".今天,我们有:
RFC 5890 "IDNA:定义和文档框架"
RFC 5891 "IDNA:协议"
RFC 5892 "Unicode代码点和IDNA"
RFC 5893 "IDNA的从右到左的脚本"
RFC 5894 "IDNA:背景,解释和基本原理"
RFC 5895 "为IDNA 2008映射字符"
您可能还想查看维基百科条目
RFC 5890还引入了术语LDH(字母,数字,连字符)标签为标签中使用主机名,并说:
这是在主机名(RFC 952)中使用的经典标签形式,尽管有一些额外的限制.它的语法与RFC 1123修改后的RFC 1034第3.5节中的"首选名称语法"相同.简而言之,它是由ASCII字母,数字和连字符组成的字符串,并且连字符不能进一步限制出现在字符串的开头或结尾.与所有DNS标签一样,其总长度不得超过63个八位字节.
回到简单的时代,这个互联网草案是主机名国际化的早期提案.具有国际字符的主机名可以使用例如"RACE"编码来编码.
"RACE编码"提案的作者指出:
根据RFC 1035,主机部分必须不区分大小写,以字母或数字开头和结尾,并且只包含字母,数字和连字符(" - ").当然,这不包括任何国际化字符,以及ASCII字符集中的许多其他字符.此外,域名部分的长度必须为63个八位字节或更短.所有包含国际化字符的转换后的名称部分都以字符串"bq--"开头.(...)选择字符串"bq--"是因为在生成此规范之前,它不太可能存在于主机部件中.
还有一件事您可能需要知道:如果url的主机或子域部分包含下划线,IE9(尚未测试其他版本)无法写入cookie.
所以要小心.:-)
澄清bortzmeyer和David Tonhofer,域名和子域名称标签可以包含前导下划线,但不包含其他地方.
正如David Tonhofer写的那样,标签是中间部分,应该遵循LDH规则,除非指定服务标签和端口标签以区别于常规标签.然后它们必须出现在标签的开头,该标签应该是服务名称和端口号注册表中的"短名称" ,没有前导0的端口号或协议(即tcp,udp).这些服务标签进一步限制为15个字符.
RFC2782指定带有下划线的服务记录子域前缀.
RFC6698指定在TLSA证书记录中使用下划线为端口号添加前缀.
与David Tonhofer的回答相反,IDN不允许编码下划线('_'U + 005F LOW LINE)或任何其他无效的ASCII字符.
来自RFC5890
[..]通过引入IDNA创建了两个新的LDH标签子集.这些被称为保留LDH标签(R-LDH标签)和非保留LDH标签(NR-LDH标签).保留的LDH标签(在某些其他上下文中称为"标记域名")具有在第三和第四个字符中包含" - " 但在其他方面符合LDH标签规则的属性.
Punycode直接将所有ASCII码点编码为ASCII,包括下划线.产生的R-LDH不符合LDH标签规则.例如,?_.com
将被编码为xn--_-zmb.com
违反规则.可能有一个单应码点看起来像一个可以合法编码的下划线(也许是'_'U + FF3F全宽低线),但这些类型的码点在RFC IgnitProperties下作为Noncharacter_Code_Point 被RFC5892分类为DISALLOWED .
RACE(另一个提议的IDN编码方案)不被IETF接受为标准,不应使用.
我按照RFC1034的链接阅读了大部分内容,并惊讶地发现:
标签必须遵循ARPANET主机名的规则.它们必须以字母开头,以字母或数字结尾,并且内部字符仅包含字母,数字和连字符.长度也有一些限制.标签不得超过63个字符.
为了澄清,域名由标记组成,这些标签用点"."分隔.此规范必须过时,因为它没有提到使用下划线.如果有人在不知道它已经过时的情况下绊倒了这个规范,我就能理解这种混乱.它已经过时了,不是吗?
我按照RFC2181的链接阅读了一些内容.特别是涉及权威或规范名称的问题以及制作有效DNS标签的问题.
如前所述,它表示只有一个长度限制,然后总结它读取:
(关于名称和有效标签)
这些已经充分说明,但规格似乎有时会被忽略.我们寻求加强现有规范.
让我想知道"只有长度限制"是否"足够".我们是否会开始看到像@#$%这样的域名!不久?互联网搞砸了不够?