サブドメイン(ドメイン名)にアンダースコア_
を含めることはできますか?
ここで与えられるほとんどの答えはfalseです。ドメイン名にアンダースコアを使用することは完全に合法です。標準、 RFC 2181、セクション11、「名前の構文」 を引用してみましょう。
DNS自体は、リソースレコードの識別に使用できる特定のラベルに1つの制限のみを設定します。その1つの制限は、ラベルの長さとフルネームに関連しています。 [...] DNSプロトコルの実装では、使用できるラベルに制限を設けてはなりません。特に、DNSサーバーは、一部のDNSクライアントプログラムに受け入れられないラベルが含まれているため、ゾーンの提供を拒否してはなりません。
元のDNS仕様、 RFC 1034 、セクション3.5「優先名の構文」も参照してくださいが、注意深く読んでください。
アンダースコアを持つドメインは、野生では非常に一般的です。 _Jabber._tcp.gmail.com
または_sip._udp.apnic.net
を確認してください。
ここで言及されている他のRFCは、さまざまなものを扱っています。元の質問は、ドメイン名に対するものでした。質問がホスト名(またはホスト名を含むURL)に対するものである場合、これは異なり、関連する標準は RFC 112 、セクション2.1「ホスト名と番号」ホスト名を文字-数字-ハイフンに制限します。
定義について明確にする必要があります。ここで使用されるように:
hostnameは RFC 952 および RFC 1123のわずかな緩和 の制限に従います。
RFC 2181 は、ドメイン名とホスト名に違いがあることを明確にします。
... [事実]任意のバイナリラベルがMXレコードを持つことができるということは、任意のバイナリ名を電子メールアドレスのホスト部分として使用できることを意味するものではありません...
したがって、hostnamesの下線はノーノー、domain namesの下線はa-okです。
実際には、アンダースコア付きのhostnamesがよく表示されます。 Robustness Principle が言うように:「あなたが送るものは保守的で、あなたが受け入れるものは寛容であること」。
21世紀には、ホスト名とドメイン名が国際化される可能性があります。これは、許可されたセット外の文字を含むlabelsの場合にエンコーディングに頼ることを意味します。
特に、hostnamesで_
をエンコードできます(2017-07更新:これは疑わしい、コメントを参照してください。_
はホスト名で使用できません。 、国際化ラベルでも使用できません。)
国際化のための最初のRFCは、2003年3月の RFC 349 、「アプリケーションにおけるドメイン名の国際化(IDNA)」でした。今日、私たちは:
Wikipedia Entry を確認することもできます
RFC 589 用語を導入 LDH(Letter-Digit-Hypen)label for labelshostnamesで使用され、次のように述べています:
これは、いくつかの追加の制限はありますが、ホスト名(RFC 952)で使用される従来のラベル形式です。その構文は、RFC 1123によって変更されたRFC 1034のセクション3.5の「優先名構文」として説明されているものと同じです。簡単に言うと、ASCII文字、数字、ハイフンで構成される文字列ハイフンを文字列の先頭または末尾に表示できないというさらなる制限。すべてのDNSラベルと同様に、その全長は63オクテットを超えてはなりません。
より簡単な時代に戻ると、 このインターネットドラフト はhostname国際化の初期の提案です。国際文字を含むホスト名は、たとえば 'RACE' encoding を使用してエンコードできます。
「RACE encoding」提案の著者は次のように述べています:
RFC 1035によれば、ホスト部分は大文字と小文字を区別せず、先頭と末尾を文字または数字にする必要があり、文字、数字、およびハイフン文字( "-")のみを含める必要があります。もちろん、これは、国際化された文字、およびASCII文字レパートリーの他の多くの文字を除外します。さらに、ドメイン名部分は63オクテット以下の長さである必要があります。..国際化された文字を含むすべての変換後の名前部分は、文字列「bq--」で始まります。 (...)文字列「bq--」が選択されたのは、この仕様が作成される前にホスト部分に存在する可能性が極めて低いためです。
知っておく必要のある追加事項が1つあります。URLのホストまたはサブドメイン部分にアンダースコアが含まれている場合、IE9(他のバージョンをテストしていない)はCookieを書き込むことができません。
そのため、注意してください。 :-)
bortzmeyer および David Tonhofer を明確にすると、ドメイン名とサブドメイン名のラベルに先頭のアンダースコアを含めることができますが、それ以外の場所はできません。
David Tonhofer が書いたように、ラベルは中間の部分であり、サービスラベルとポートラベルを指定するときはLDHルールexceptに従う必要があります通常のラベルと区別してください。次に、ラベルの先頭に出現する必要があります。ラベルの先頭は、 サービス名とポート番号レジストリ 、先頭に0がないポート番号、またはプロトコル(tcp、 udp)。これらのサービスラベルは、さらに15文字に制限されています。
David Tonhofer の答えに反して、IDNはアンダースコア( '_' U + 005F LOW LINE)またはその他の無効なASCII文字のエンコードを許可しません。
RFC589 から
[..] IDNAの導入により、LDHラベルの2つの新しいサブセットが作成されます。これらは、予約済みLDHラベル(R-LDHラベル)および非予約済みLDHラベル(NR-LDHラベル)と呼ばれます。他のコンテキストでは「タグ付きドメイン名」と呼ばれる予約済みLDHラベルには、3番目と4番目の文字に「-」が含まれるプロパティがありますが、それ以外はLDHラベルルールに準拠しています。
Punycodeは、アンダースコアを含むすべてのASCIIコードポイントをASCIIとして直接エンコードします。結果のR-LDHは、LDHラベル規則に適合しません。たとえば、Σ_.com
は、ルールに違反するxn--_-zmb.com
としてエンコードされます。合法的にコード化できるアンダースコアのように見えるホモグラフィックコードポイントが存在する可能性がありますが(おそらく '_' U + FF3F全角低線)、これらの種類のコードポイントは RFC5892 2.3未満で分類されますNoncharacter_Code_PointとしてのIgnorableProperties。
RACE(他の提案されたIDNエンコード方式)は、IETFによって標準として受け入れられなかったため、使用すべきではありません。
RFC1034へのリンクをたどって、そのほとんどを読んで、これを見て驚いた:
ラベルは、ARPANETホスト名の規則に従う必要があります。文字で始まり、文字または数字で終わり、内部文字として文字、数字、ハイフンのみを使用する必要があります。長さにもいくつかの制限があります。 。ラベルは63文字以下でなければなりません。
明確にするために、ドメイン名はドット「。」で区切られたラベルで構成されています。この仕様は、アンダースコアの使用に言及していないため、古くなっている必要があります。誰かがこの仕様を時代遅れだと知らずにつまずいた場合、私は混乱を理解できます。時代遅れですよね?
RFC2181へのリンクをたどって、その一部を読みました。特に、それが信頼できる、または正規の名前の問題と、有効なDNSラベルを作るものの問題に関係する場合。
前に投稿したように、長さの制限のみがあり、それをまとめると次のようになります:
(名前と有効なラベルについて)
これらはすでに適切に指定されていますが、仕様は時々無視されるようです。既存の仕様を強化しようとしています。
「長さのみの制限」が「適切」かどうか疑問に思うようになります。 @#$%のようなドメイン名を見始めますか!!もうすぐ?インターネットは十分に台無しにされていませんか?
最近、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)で定義)およびインターネットブラウザソフトウェアおよびその他のアプリケーションのベンダーの自発的な集まりです。証明書を使用します(以下のセクション2.1(a)(3)で定義されている証明書の消費者)。
ここで、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
それは間違いなく悪い考えです^^
個々の TLD は、 ドメイン名 に独自のルールと制限を置くことができます(ローカル言語に対応するなど)。
たとえば、 CIRA によれば、カナダの.ca
(ドメイン名は許可されます:
文字
a
〜z
、および次のアクセント記号付き文字:é ë ê è â à æ ô œ ù û ü ç î ï ÿ
。ドメイン名では大文字と小文字が区別されないことに注意してください。これは、大文字と小文字を区別しないことを意味します(A
=a
);番号
0123456789
、およびハイフン文字( "
-
)(ただし、ドメイン名の開始または終了にはを使用できません)。
最大長は63文字です。ただし、アクセント記号付きの各文字は、その制限を4文字分減らします。
( ソース )
ちなみに、これにより、dot-caドメインで(4 Quadragintillionドメイン名の可能性(サブドメインはカウントされません)が可能になります。