let-dig

ラベル (ドメイン名)

[5] ドメイン名におけるラベル (label) とは、 . で区切られたそれぞれの部分のことです。

DNS における定義

[11] ラベルは、 ALPHA, DIGIT, - の1文字以上の連続です。ただし、先頭1文字と末尾1文字は - であってはなりません。

  1. |
    1. ALPHA
    2. DIGIT
  2. ?
    1. *
      1. |
        1. ALPHA
        2. DIGIT
        3. -
    2. |
      1. ALPHA
      2. DIGIT
[12] 以前は先頭1文字が DIGIT であることも認められていませんでしたが、 RFC 1123 で緩和されています >>66差分仕様書の悪習で改訂されていることが分かりにくいため、 緩和されていることを知らず RFC 違反だなどと誤解されることが21世紀に入ってもなお後を絶ちません。

[1] IDN2008 ではこれを「LDHラベル」と呼んでいます。 この意味での「ラベル」の詳細は LDHラベルの項を参照してください。

仕様書

IDNA における定義

IDNA2003、IDNA2008 での定義

[1]

ラベル (なふだ) (label) は、 ドメイン名の個々の部分です。 ラベルは通常 (dot) で区切って示されます。 例えば、ドメイン名 www.example.com は、 wwwexamplecom の3つのラベルで構成されます。 (STD 13長さ根ラベルが説明されています。 RFC 1123 で末尾 (dot) を使った完全な名前の表記法が説明されています。 これは明示的に www.example.com. のように記述したり、暗示的に www.example.com としたりします。しかし、この文書ではラベルとは考えません。) IDNA(RFC 1035RFC 2181バイナリ列ラベルRFC 2673ビット列ラベルではなく) テキストであるラベルで使用可能な文字集合特定の文脈において拡張します。利用可能な文字集合は文脈によって異なり、次の節で説明します。 この文書では、以後、ラベルという用語テキスト・ラベル (text label) の略、 各ラベル (every label) 各テキスト・ラベル (every text label) の略として使います。

[15] 追加と削除は IDNA2003IDNA2008 での違いです。

UTS #46 での定義

[33] >>34

a label is a substring of a domain name. That substring is bounded on both sides by either the start or the end of the string, or any of the following characters, called label-separators

仕様書

HSTS での定義

[69]

domain name label
is that portion of a domain name appearing "between the dots", i.e., consider "foo.example.com": "foo", "example", and "com" are all domain name labels.

分類

UTS #46 における制約

[35] UTS #46ラベルに対していくつかの制約を課しています。

[40] この対象はテキスト・ラベルに相当するものであり、バイナリー列ラベルビット列ラベルは考慮されていません。

共通の制約

[73] ラベルラベルが満たさなければならない妥当性基準 (validity criteria) とは、 処理オプションUseSTD3ASCIIRulesCheckHyphensCheckBidiCheckJoiners に依存した次のようなものです >>37

[47] ここで、状態値UseSTD3ASCIIRules によって変化します。

[53] - に関する検査は、 Web互換でない疑いがあります。 Unicode IDNA互換性処理を参照。

[72] この妥当性基準は、Unicode IDNA互換性処理から参照されています。

UseSTD3ASCIIRules

[48] UseSTD3ASCIIRulesであれば ASCII文字妥当性の検証方法は実装依存となります。例えば LDH の他に _ を認めることができます。 >>37

[49] これは単にASCII文字を認めるだけにとどまらず、写像正規化の結果そのような ASCII文字に変換される非ASCII文字を認めることにつながります。

[50] 例えば LOW LINE の使用を認めると、 FULLWIDTH LOW LINE も認めることとなります。

[51] またいくつかの非ASCII文字正準分解UseSTD3ASCIIRulesだと認められないASCII文字となるため、 UseSTD3ASCIIRulesの時は使用禁止となりますが、の時は使用禁止になりません。 そのような文字disallowed_STD3_valid に分類されています。 disallowed_STD3_valid文字は、 UseSTD3ASCIIRulesであっても、 対応するASCII文字が認められないときにはやはり禁止しなければなりません。 >>37

追加の制約

[52] IDNA2008bidi規則ContextJ規則にも従うべきです >>37

[57] 実装は更に追加で制約を加えたり、警告を出したりしても構いません。 例えば、次のような制約が考えられます >>56

ワイルドカード

[89] ワイルドカード *ラベルとして認められる文字ではありません。 従ってラベルで構成されるドメイン名に、いわゆるワイルドカードドメインは含まれません。

メモ

[3]

domain = subdomain / " "
subdomain = label *("." label)
label = letter [ [ldh-str] let-dig ]
ldh-str = 1*let-gid-hyp
let-dig-hyp = let-dig / "-"
let-dig = letter / digit
letter = <"A" / ... / "Z">
digit = <"0" / ... / "9">

[4]

domain = subdomain / " "
subdomain = label *("." label)
label = ALPHA [*(ALPHA / DIGIT / "-") (ALPHA / DIGIT)]
ldh-str = 1*(ALPHA / DIGIT / "-")

[6] >>2ドメイン名部品 (domain name component) と呼んでいます。

[7] RFC 2181 - Clarifications to the DNS Specification ( 版) https://tools.ietf.org/html/rfc2181#section-11

[8] 1136616 – mozilla::pkix name matching disallows some characters in reference IDs that are valid in DNS labels ( ()) https://bugzilla.mozilla.org/show_bug.cgi?id=1136616

[9] Issue 463410 - chromium - Inconsistent hostname handling in Chrome - Monorail ( ()) https://bugs.chromium.org/p/chromium/issues/detail?id=463410

[10] Issue 496472 - chromium - Cleanup & move IsCanonicalizedHostCompliant from net_util into QUIC - Monorail ( ()) https://bugs.chromium.org/p/chromium/issues/detail?id=496472

[70] SpringのCORS機能がRFC 3986なホスト名に対応してなかった・・・ - Qiita ( ()) http://qiita.com/kazuki43zoo/items/43abfb72ddf0f1096fa7

リクエストにOriginヘッダーがあるとCORS(Cross-Origin Resource Sharing)関連の処理が動き、その処理の中でリクエストURLをjava.net.URIに変換するロジックがあります。URIクラスはRFC 3986に対応していないため、例えばリクエストURLが「 http://spring_app/」だとホスト名がnullになり、Spring側の処理の中でNPEが発生しています。

[71] RFC 7719 - DNS Terminology ( ()) https://tools.ietf.org/html/rfc7719#section-2

Label: The identifier of an individual node in the sequence of nodes

identified by a fully qualified domain name.

[45] Consider ignoring UTS46 validity criteria V2 · Issue #160 · servo/rust-url () https://github.com/servo/rust-url/issues/160

[46] IDNA · Issue #53 · whatwg/url () https://github.com/whatwg/url/issues/53

[88] rfc4151, https://datatracker.ietf.org/doc/html/rfc4151#section-2.1

DNScomp