Dns (域名)子域是否可以有下划线_&引用;在里面?

Dns (域名)子域是否可以有下划线_&引用;在里面?,dns,subdomain,standards,Dns,Subdomain,Standards,子域(域名)中是否可以有下划线?这里给出的大多数答案都是假。这是完全合法的 域名中的下划线。让我引用一下标准: DNS本身仅对特定标签设置一个限制 可用于标识资源记录的。那个 限制与标签的长度和完整尺寸有关 名称[…]DNS协议的实施不得放置任何 对可使用标签的限制。特别是DNS 服务器不得拒绝为区域提供服务,因为该区域包含标签 这对于某些DNS客户端程序可能是不可接受的 另请参见原始DNS规范,第3.5节 “首选名称语法”,但请仔细阅读 带有下划线的域在野外非常常见。检查\u jabber.\

子域(域名)中是否可以有下划线

这里给出的大多数答案都是。这是完全合法的 域名中的下划线。让我引用一下标准:

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

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

带有下划线的域在野外非常常见。检查
\u jabber.\u tcp.gmail.com
\u sip.\u udp.apnic.net

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

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

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

为了澄清,域名是由标签组成的,标签之间用点“.”隔开。该规范必须过时,因为它没有提到下划线的使用。如果有人在不知道这个规范已经过时的情况下无意中发现它,我可以理解这种混乱。它已经过时了,不是吗

我按照RFC2181的链接阅读了其中的一些内容。特别是当它涉及到什么是权威或规范名称的问题,以及什么是有效的DNS标签的问题时

如前所述,只有一个长度限制,总结起来如下:

(关于名称和有效标签)

这些都已经有了充分的规定,但是这些规范有时似乎被忽略了。我们寻求加强现有规范


有点让我怀疑“仅限长度”是否“足够”。我们会看到像@#$%这样的域名吗!!很快?互联网还不够糟糕吗?

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

所以要小心点。:-)

关于术语的说明,以促进Bortzmeyer的回答 人们应该清楚定义。在这里使用:

  • 域名是DNS数据库中资源的标识符
  • 标签是位于点之间的域名的一部分
  • 主机名是一种特殊类型的域名,用于标识Internet主机
主机名受和的限制

明确域名和主机名之间的区别:

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

所以主机名中的下划线是否定的,域名中的下划线是肯定的

实际上,很可能会看到主机名带有下划线。正如《圣经》所说:“发送的东西要保守,接受的东西要自由”

关于编码的注记 在21世纪,主机名和域名都可能国际化!这意味着,如果标签包含超出允许范围的字符,则采用编码

特别是,它允许在主机名中对
\uuu
进行编码(更新2017-07:这一点值得怀疑,请参见注释。
\u
仍然不能在主机名中使用。事实上,它甚至不能在国际化标签中使用。)

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

  • “IDNA:定义和文档框架”
  • “IDNA:协议”
  • “Unicode代码点和IDNA”
  • “IDNA的从右到左脚本”
  • IDNA:背景、解释和基本原理
  • “IDNA 2008的映射字符”
您可能还需要检查

介绍主机名中使用的标签术语,并说明:

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

回到更简单的时代,这是主机名国际化的早期建议。具有国际字符的主机名可以使用,例如

“种族编码”提案的作者指出:

根据RFC 1035,主机部件必须不区分大小写,以字母或数字开头和结尾,并且只包含字母、数字和连字符(“-”)。当然,这不包括任何国际化字符,以及ASCII字符库中的许多其他字符。此外,域名部分的长度必须为63个八位字节或更短 长度。。。。包含国际化cha的所有转换后名称部分
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