子域名(域名)中可以有下划线_
吗?
子域名(域名)中可以有下划线_
吗?
Answers:
这里给出的大多数答案都是错误的。在域名中加下划线是完全合法的。让我引用标准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节“主机名和数字”,它将主机名限制为字母数字连字符。
_jabber._tcp.gmail.com
不是域,而是FQDN。由于网址中不能包含下划线,因此您可能永远无法购买带下划线的域名。因此,从DNS语法的角度来看,即使是域也可能带有下划线,除非是本地域,否则您将永远不会遇到任何下划线。
应该清楚定义。如此处所用:
该主机受到的限制RFC 952和RFC 1123的轻微放松
RFC 2181明确指出,域名和主机名之间存在区别:
... [任何二进制标签都可以具有MX记录这一事实并不意味着任何二进制名称都可以用作电子邮件地址的主机部分...
因此,主机名中的下划线是禁止的,域名中的下划线是可以的。
在实践中,很可能会看到带下划线的主机名。正如健壮性原则所说:“对您的发送内容要保守,对您的接受要宽松”。
事实证明,在21世纪,主机名和域名都可以被国际化!这意味着,如果标签包含的字符超出允许的范围,则应诉诸编码。
特别是,它允许一个人_
在主机名中编码(更新2017-07:这是令人怀疑的,请参阅注释。_
仍然不能在主机名中使用。实际上,它甚至不能在国际化标签中使用。)
第一个国际化的RFC是2003年3月的RFC 3490,“国际化应用程序中的域名(IDNA)”。今天,我们有:
您可能还需要检查Wikipedia条目
RFC 5890还引入了术语LDH(字母,数字,连字符)标签为标签中使用主机名,并说:
这是主机名(RFC 952)中使用的经典标签形式,尽管有一些其他限制。它的语法与由RFC 1123修改的RFC 1034第3.5节中描述的“首选名称语法”相同。简而言之,它是一个由ASCII字母,数字和连字符组成的字符串,并进一步限制了连字符不能出现在字符串的开头或结尾。像所有DNS标签一样,其总长度不得超过63个八位位组。
回到更简单的时代,此Internet草案是主机名国际化的早期建议。具有国际字符的主机名可以使用“ RACE”编码进行编码。
“ RACE编码”提案的作者指出:
根据RFC 1035,主机部分必须不区分大小写,以字母或数字开头和结尾,并且仅包含字母,数字和连字符(“-”)。当然,这不包括任何国际化字符以及ASCII字符库中的许多其他字符。此外,域名部分的长度必须为63个八位字节或更短。...包含国际化字符的所有后转换名称部分都以字符串“ bq--”开头。(...)之所以选择字符串“ bq--”,是因为在产生此规范之前,它在主机部件中极不可能存在。
bar.baz.
(举例)是分层下方域名只是收集bar.baz.
,例如a.bar.baz.
,f.g.bar.baz.
,h.bar.baz.
等等。此“子域”可能包含也可能不包含实际的主机名。
a.bar.baz
(域名)称为字符串bar.baz
(另一域名)的子域。域名(DNS数据库资源),a.bar.baz
并且bar.baz
可以是主机名,也可以不是。
您可能还需要了解一件事:如果URL的主机或子域部分包含下划线,则IE9(尚未测试其他版本)无法编写cookie。
所以要小心。:-)
澄清bortzmeyer和David Tonhofer,域名和子域名标签可以包含下划线,但是没有其他地方。
正如David Tonhofer所写,标签是中间的部分,应遵循LDH规则,除非指定服务标签和端口标签以区别于常规标签。然后它们必须出现在标签的开头,该标签应该是服务名称和端口号注册表中的“短名称” ,不带前导0的端口号或协议(即tcp,udp)。这些服务标签进一步限制为15个字符。
与David Tonhofer的答案相反,IDN不允许编码下划线('_'U + 005F LOW LINE)或任何其他无效的ASCII字符。
[..] IDNA的引入创造了LDH标签的两个新子集。这些称为保留的LDH标签(R-LDH标签)和非保留的LDH标签(NR-LDH标签)。保留的LDH标签在其他一些上下文中称为“标记的域名”,具有以下属性:它们在第三个和第四个字符中包含“-”,但它们符合LDH标签规则。
Punycode将所有ASCII码点直接编码为ASCII,包括下划线。生成的R-LDH不符合LDH标签规则。例如,Σ_.com
将被编码为xn--_-zmb.com
违反规则。可能存在一个单字形式的代码点,看起来像一个下划线,可以合法地进行编码(也许是“ _” U + FF3F全角下划线),但是RFC5892在2.3 IgnorableProperties下将这些类型的代码点归类为DISALLOWED,作为Noncharacter_Code_Point。
IETF不接受RACE(其他提议的IDN编码方案)作为标准,因此不应使用。
我遵循了指向RFC1034的链接并阅读了其中的大部分内容,并惊讶地看到了这一点:
标签必须遵循ARPANET主机名的规则。它们必须以字母开头,以字母或数字结尾,并且仅以字母,数字和连字符作为内部字符。长度也有一些限制。标签不得超过63个字符。
为了清楚起见,域名由以点“。”分隔的标签组成。该规范必须已过时,因为它没有提到下划线的使用。如果有人在不知情的情况下偶然发现了此规范,我可以理解它的困惑。它已经过时了,不是吗?
我按了RFC2181的链接并阅读了其中的一些内容。特别是在涉及什么是权威或规范名称的问题以及什么内容构成有效的DNS标签的问题时。
如前所述,它声明只有一个长度限制,然后将其总结为:
(关于名称和有效标签)
这些已经充分指定,但是有时似乎忽略了这些规范。我们寻求加强现有规范。
有点让我想知道“仅长度限制”是否“足够”。我们是否将开始看到像@#$%这样的域名!不久?互联网搞砸了吗?
最近,CAB论坛(*)决定:
含有任何DNSNAME条目下划线字符和具有超过30天的有效期中的所有证书必须被撤销之前2019年1月15日,https://cabforum.org/2018/11/12/ballot-sc-12- dnsnames下划线下划线/
这意味着您将不再被允许在具有ssl / tls证书的域中使用下划线。
(*)证书颁发机构浏览器论坛(CA /浏览器论坛)是领先的证书颁发者(定义见下文第2.1(a)(1)和(2)节)以及Internet浏览器软件和其他应用程序的供应商的自愿聚集使用证书(证书消费者,如以下第2.1(a)(3)节所定义)。
个人TLD的可以将自己的规则和限制在域的名字,因为他们认为合适的,例如,以适应当地的语言。
信件
a
通过z
,并以下重音符号:é ë ê è â à æ ô œ ù û ü ç î ï ÿ
。请注意,域名不区分大小写。这意味着大写字母和小写字母(A
=a
)之间没有区别;数字
0123456789
和连字符(“
-
)(尽管不能用于开头或结尾域名)。
最大长度为63个字符,但每个带重音符号的字符最多可减少4个字符。
(来源)
顺便说一句,这为dot-ca域提供了大约4个Quadragintillion域名可能性(不计算子域)。
这是我来自Java世界的2美分:
从带有Java 8的Spark Scala控制台:
scala> new java.net.URI("spark://spark_master").getHost
res10: String = null
scala> new java.net.URI("spark://spark-master").getHost
res11: String = spark-master
scala> new java.net.URI("spark://spark_master.google.fr").getHost
res12: String = null
scala> new java.net.URI("spark://spark.master.google.fr").getHost
res13: String = spark.master.google.fr
scala> new java.net.URI("spark://spark-master.google.fr:3434").getHost
res14: String = spark-master.google.fr
scala> new java.net.URI("spark://spark-master.goo_gle.fr:3434").getHost
res15: String = null
绝对是个坏主意^^
不,您不能在子域中使用下划线,而应使用连字符(破折号)。即my-subdomain.agahost.com是可以接受的,而my_subdomain.agahost.com是不可接受的。
如果您希望它在Internet上解决,则不会。
您不能拥有:http : //my_subdomain.example.com无效。
您可以使用:http : //my-subdomain.example.com(带连字符)。