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

时间:2010-02-01 22:14:59

标签: dns subdomain standards

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

11 个答案:

答案 0 :(得分:314)

此处给出的大多数答案都是 false 。拥有是完全合法的 域名中的下划线。让我引用标准RFC 2181, section 11, "Name syntax"

  

DNS本身只对特定标签设置了一个限制   可用于识别资源记录。那个   限制与标签的长度和完整有关   名称。 [...] DNS协议的实现不得放置任何内容   对可以使用的标签的限制。特别是DNS   服务器不得拒绝为区域提供服务,因为它包含标签   某些DNS客户端程序可能无法接受。

另请参阅原始DNS规范RFC 1034,第3.5节 “首选名称语法”,但请仔细阅读。

具有下划线的域在野外非常常见。查看_jabber._tcp.gmail.com_sip._udp.apnic.net

这里提到的其他RFC处理不同的事情。原本的 问题是域名。如果问题是针对主机 名称(或对于包含主机名的URL),则为 不同,相关标准是RFC 1123,第2.1节“主持人 名称和号码“将主机名限制为 字母 - 数字 - 连字符。

答案 1 :(得分:86)

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

应该清楚定义。如下所用:

  • 域名是DNS数据库中资源的标识符
  • 标签 是点之间的域名部分
  • 主机名特殊类型的域名,用于标识互联网主机

主机名RFC 952slight relaxation of RFC 1123

的限制

RFC 2181表明域名和主机名之间存在差异:

  

... [事实上]任何二进制标签都可以有MX记录并不意味着任何二进制名称都可以用作电子邮件地址的主机部分......

所以主机名中的下划线是禁止的,域名中的下划线是正常的。

在实践中,人们可能会看到带有下划线的主机名。正如Robustness Principle所说的那样:“在你所发送的内容中保守一点,在你所接受的内容中保持自由”。

关于编码的说明

在21世纪,事实证明主机名以及域名可以国际化!这意味着在标签的情况下采用编码,其中包含超出允许集的字符。

特别是,它允许人们对主机名中的_进行编码(更新2017-07:这是值得怀疑的,请参阅注释。_仍然不能用于主机名。实际上,它甚至不能用于国际化标签。)

国际化的第一个RFC是2003年3月的RFC 3490,“将应用程序中的域名国际化(IDNA)”。今天,我们有:

您可能还想查看Wikipedia Entry

RFC 5890主机名中使用的标签引入了LDH (Letter-Digit-Hypen) label这一术语,并说:

  

这是在主机名(RFC 952)中使用的经典标签形式,尽管有一些额外的限制。它的语法与RFC 1123修改后的RFC 1034第3.5节中的“首选名称语法”相同。简而言之,它是由ASCII字母,数字和连字符组成的字符串,并且连字符不能进一步限制出现在字符串的开头或结尾。与所有DNS标签一样,其总长度不得超过63个八位字节。

回到简单的时间,this Internet draft主机名国际化的早期提案。具有国际字符的主机名可以使用例如'RACE' encoding编码。

“RACE编码”提案的作者注意到:

  

根据RFC 1035,主机部分必须不区分大小写,以字母或数字开头和结尾,并且只包含字母,数字和连字符(“ - ”)。当然,这不包括任何国际化字符,以及ASCII字符集中的许多其他字符。此外,域名部分必须是63个八位字节或更短   length ....所有包含国际化字符的转换后的名称部分都以字符串“bq--”开头。 (...)选择字符串“bq--”是因为它极不可能   在制定本规范之前存在于主机部件中。

答案 2 :(得分:47)

您可能还需要了解一件事:如果网址的主机或子域部分包含下划线,则IE9(尚未测试其他版本)无法写入Cookie。

所以要小心。 : - )

答案 3 :(得分:8)

澄清bortzmeyerDavid Tonhofer,域名和子域名称标签可以包含前导下划线,但不包含其他地方。

正如David Tonhofer所写,标签是句点之间的部分,在指定服务标签和端口标签以区别于常规标签时,应遵循LDH规则除外)。然后它们必须出现在标签的开头,标签应该是Service Name and Port Number Registry的“短名称”,没有前导0的端口号,或协议(即tcp,udp)。这些服务标签进一步限制为15个字符。

  • RFC2782指定前缀 带有下划线的服务记录子域。
  • RFC6698指定前缀 TLSA证书记录中带有下划线的端口号。

David Tonhofer的答案相反,IDN不允许编码下划线('_'U + 005F LOW LINE)或任何其他无效的ASCII字符。

来自RFC5890

  

[..]由两个新的LDH标签子集创建   IDNA的介绍。这些被称为保留LDH标签(R-LDH   标签)和非保留的LDH标签(NR-LDH标签)。保留的LDH   标签,在其他一些情况下称为“标记域名”   它们在第三和第四中包含“ - ”的属性   字符但符合LDH标签规则

Punycode直接将所有ASCII码点编码为ASCII,包括下划线。产生的R-LDH不符合LDH标签规则。例如,Σ_.com将被编码为xn--_-zmb.com,这违反了规则。可能存在一个看似下划线的单应码码,可以合法编码(也许是'_'U + FF3F全宽低线),但这些类型的码点在2.3 IgnorableProperties下被RFC5892分类为DISALLOWED Noncharacter_Code_Point。

RACE(另一个提议的IDN编码方案)未被IETF接受为标准,不应使用。

答案 4 :(得分:6)

我按照RFC1034的链接阅读了大部分内容,并对此感到惊讶:

标签必须遵循ARPANET主机名的规则。他们一定 以字母开头,以字母或数字结尾,并作为内部 字符只有字母,数字和连字符。还有一些 限制长度。标签不得超过63个字符。

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

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

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

(关于名称和有效标签)

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

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

答案 5 :(得分:1)

这里是来自Java世界的2美分:

从Spark Scala控制台,使用Java 8:

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

这绝对是一个坏主意^^

答案 6 :(得分:0)

单个TLD可以根据需要在domains names上设置自己的规则和限制,例如以适应本地语言。

例如,根据CIRA,允许加拿大的 .ca 域名:

  
      
  • az以及以下带重音符号的字母:é ë ê è â à æ ô œ ù û ü ç î ï ÿ。请注意,域名不区分大小写。这意味着大写字母和小写字母(A = a)之间没有区别;

  •   
  • 数字0123456789

  •   
  • 连字符(“ -)(尽管 不能用于开头或结尾域名)。

  •   

最大长度为63个字符,但每个重音字符会使该限制减少 4 个字符。

Source


顺便说一句,这为dot-ca域提供了大约 4 Quadragintillion 个域名可能性(不计算子域)。

答案 7 :(得分:0)

最近,CAB论坛(*)决定

  

所有在dNSName条目中包含下划线字符且有效期超过30天的证书必须在2019年1月15日之前撤销。https://cabforum.org/2018/11/12/ballot-sc-12-sunset-of-underscores-in-dnsnames/

这意味着您将不再被允许在拥有ssl / tls证书的域中使用下划线。

(*)证书颁发机构浏览器论坛(CA /浏览器论坛)是由领先的证书颁发机构(定义见下文第2.1(a)(1)和(2)节)以及Internet浏览器软件和供应商自愿组织的。其他使用证书的应用程序(证书消费方,如以下第2.1(a)(3)节所定义)。

答案 8 :(得分:0)

刚刚创建了一个本地项目(带有无业游民),并且通过ip地址访问它时,它运行良好。然后,我在主机文件中添加了some_name.test并尝试以这种方式访问​​它,但是我一直都收到“错误请求-400”。浪费了数小时,直到我发现只需将域名更改为some-name.test即可解决问题。因此,至少在Mac OS上本地不起作用。

答案 9 :(得分:0)

否,您不能在子域中使用下划线,而应使用连字符(破折号)。即my-subdomain.agahost.com是可以接受的,而my_subdomain.agahost.com是不可接受的。

答案 10 :(得分:-2)

如果您希望它在Internet上解决,则不会。

您不能拥有:http://my_subdomain.example.com无效。

您可以使用:http://my-subdomain.example.com和连字符。