当前位置:  开发笔记 > 前端 > 正文

Can(域名)子域名中是否有下划线"_"?

如何解决《Can(域名)子域名中是否有下划线"_"?》经验,为你挑选了5个好方法。

子域名(域名)可以_在其中加下下划线吗?



1> bortzmeyer..:

这里给出的答案大多数都是假的.在域名中使用下划线是完全合法的.让我引用标准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节"主机名和数字",它将主机名限制为字母 - 数字 - 连字符.


+1"域名"和"主机名"之间的区别
我很困惑,1034说"标签必须遵循ARPANET主机名的规则.它们必须以字母开头,以字母或数字结尾,内部字符只有字母,数字和连字符." 哪一部分允许下划线?
问题(除非它被编辑)是关于子域即ie.主机名.你对事实陈述没有错,除非根据问题目前的措辞指出答案是错误的.
措辞令人困惑。网址不能包含下划线。URL始终是FQDN,不是主机名。FQDN可以具有一个空的主机名,在这种情况下,FQDN =域。_jabber._tcp.gmail.com不是域,而是FQDN。由于网址中不能包含下划线,因此您可能永远无法购买带下划线的域名。因此,从DNS语法的角度来看,即使是域名也可能带有下划线,除非是本地域名,否则您将永远不会遇到下划线。

2> David Tonhof..:

关于术语的说明,以促进Bortzmeyer的回答

人们应该清楚定义.如下所用:

domain nameDNS数据库中资源标识符

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--"是因为在生成此规范之前,它不太可能存在于主机部件中.



3> Kai Mattern..:

还有一件事您可能需要知道:如果url的主机或子域部分包含下划线,IE9(尚未测试其他版本)无法写入cookie.

所以要小心.:-)


更相关:MS关心这个吗?
MS说,["这种行为是设计上的"](https://support.microsoft.com/en-us/kb/316112).
我们刚刚在一个项目中实现了这一点 - 而且我即将对那里奇怪的IE问题感到疯狂.直到我们在子域中发现下划线.; O)
在IE10中仍然存在问题.MS知道这个吗?
可在IE7中重现:http://stackoverflow.com/questions/794243/internet-explorer-ignores-cookies-on-some-domains-cannot-read-or-set-cookies

4> Andrew Domas..:

澄清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接受为标准,不应使用.



5> Ted Cambron..:

我按照RFC1034的链接阅读了大部分内容,并惊讶地发现:

标签必须遵循ARPANET主机名的规则.它们必须以字母开头,以字母或数字结尾,并且内部字符仅包含字母,数字和连字符.长度也有一些限制.标签不得超过63个字符.

为了澄清,域名由标记组成,这些标签用点"."分隔.此规范必须过时,因为它没有提到使用下划线.如果有人在不知道它已经过时的情况下绊倒了这个规范,我就能理解这种混乱.它已经过时了,不是吗?

我按照RFC2181的链接阅读了一些内容.特别是涉及权威或规范名称的问题以及制作有效DNS标签的问题.

如前所述,它表示只有一个长度限制,然后总结它读取:

(关于名称和有效标签)

这些已经充分说明,但规格似乎有时会被忽略.我们寻求加强现有规范.

让我想知道"只有长度限制"是否"足够".我们是否会开始看到像@#$%这样的域名!不久?互联网搞砸了不够?


不,它不是过时的.RFC1034是关于*主机名*的规范,*域名*的特例,它是DNS数据库中资源的通用标识符.例如,URI的"主机"部分是相当宽松地定义的(http://tools.ietf.org/html/rfc3986#section-3.2.2),但RFC注意到:"由注册名称标识的主机是通常用于在本地定义的主机或服务名称注册表中查找的字符序列...用于在DNS中查找的注册名称使用[RFC1034]的第3.5节和[RFC1123]的第2.1节中定义的语法.
推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有