[5] ドメイン名におけるラベルとは、 .
で区切られたそれぞれの部分のことです。
[11] ラベルは、 ALPHA
, DIGIT
,
-
の1文字以上の連続です。ただし、先頭1文字と末尾1文字は -
であってはなりません。
[1] IDN2008 ではこれを「LDHラベル」と呼んでいます。 この意味での「ラベル」の詳細は LDHラベルの項を参照してください。
ラベルは、 ドメイン名の個々の部分です。 ラベルは通常点で区切って示されます。 例えば、ドメイン名
www.example.com
は、www
、example
、com
の3つのラベルで構成されます。 (STD 13 で長さ零の根ラベルが説明されています。RFC 1123 で末尾点を使った完全な名前の表記法が説明されています。 これは明示的にwww.example.com.
のように記述したり、暗示的にwww.example.com
としたりします。しかし、この文書ではラベルとは考えません。) IDNA は (RFC 1035 や RFC 2181 のバイナリ列ラベルや RFC 2673 のビット列ラベルではなく) テキストであるラベルで使用可能な文字の集合を特定の文脈において拡張します。利用可能な文字の集合は文脈によって異なり、次の節で説明します。 この文書では、以後、ラベルという用語をテキスト・ラベルの略、各ラベルを各テキスト・ラベルの略として使います。
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
- 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.
[35] UTS #46 はラベルに対していくつかの制約を課しています。
[73] ラベルラベルが満たさなければならない妥当性基準とは、 処理オプションと UseSTD3ASCIIRules、 CheckHyphens、 CheckBidi、 CheckJoiners に依存した次のようなものです >>37。
[47] ここで、状態値は UseSTD3ASCIIRules によって変化します。
[53] -
に関する検査は、 Web互換でない疑いがあります。
Unicode IDNA互換性処理を参照。
[72] この妥当性基準は、Unicode IDNA互換性処理から参照されています。
[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] IDNA2008 のbidi規則・ContextJ規則にも従うべきです >>37。
[57] 実装は更に追加で制約を加えたり、警告を出したりしても構いません。 例えば、次のような制約が考えられます >>56。
[89]
ワイルドカード *
はラベルとして認められる文字ではありません。
従ってラベルで構成されるドメイン名に、いわゆるワイルドカードドメインは含まれません。
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">
domain = subdomain / " " subdomain = label *("." label) label = ALPHA [*(ALPHA / DIGIT / "-") (ALPHA / DIGIT)] ldh-str = 1*(ALPHA / DIGIT / "-")
[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
[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
DIGIT
であることも認められていませんでしたが、 RFC 1123 で緩和されています >>66。 差分仕様書の悪習で改訂されていることが分かりにくいため、 緩和されていることを知らず RFC 違反だなどと誤解されることが21世紀に入ってもなお後を絶ちません。