7

RFC 3986 は、URI のホスト コンポーネントが「大文字と小文字を区別しない」ことを指定しています。ただし、UCS または UTF-8 文字に関して「大文字と小文字を区別しない」が何を意味するかは指定されていません。

RFC に示されている例 (例: " <HTTP://www.EXAMPLE.com/> is equal to <http://www.example.com/>") から、「大文字と小文字を区別しない」ということは、少なくとも文字 A ~ Z が UTF-8 文字セットの文字 32 の前にある文字と同等であると見なされることを意味すると推測できます。つまり、 AZ。ただし、この範囲外の文字をどのように扱うべきかについては言及されていません。したがって、www.OLÉ.comというエンコードも正規化もされていない登録名が与えられた場合、RFC で許容される正規化の 3 つの形式が考えられます。

  1. 小文字でwww.olé.comに変換し、パーセント エンコードして www.ol%E9.com に変換します
  2. www.olÉ.comには A ~ Z 文字のみを小文字にしてから、www.ol%C9.com にパーセント エンコードします。
  3. パーセントで www.OL%C9.com にエンコードしてから、パーセントでエンコードされていない部分を小文字で www.ol%C9.com にすると、2 と同じ結果になります。

質問は次のとおりです。どちらが正しいですか。ケース 1 の場合、どの文字が大文字と見なされ、どの文字が小文字と見なされるか (また、どの文字に大文字と小文字がないか) を定義するものは何ですか?

4

1 に答える 1

3

DNS によって解決されるホスト名は常に小文字です。

DNS ホスト名 (RFC 1123) に UTF-8 文字を使用することはできませんが、「国際化ドメイン名」を使用する回避策が導入されています。この回避策は一般にpunycodeとして知られています。

Punycode を使用すると、非 ASCII 文字を ASCII 文字で表すことができます。

非 ASCII 文字は、ホスト名ラベルで許可されている ASCII 文字 (文字、数字、およびハイフン) で表されます。

-- https://www.ietf.org/rfc/rfc3492.txt

質問 ( ) で提供された例については、解決さwww.olé.comれるドメイン名はwww.ol%E9.comではありません。

ドメイン名にパーセント記号が表示されている場合は、ホスト名を URL エンコードしたことを意味し、少なくとも解決には問題があります。

たとえば、a次のようなタグを使用すると正しく機能します。

<a href="//www.ol%C3%A9.com">Click Here</a>

ただし、DNS サーバーは を解決せずwww.ol%C3%A9.com、変換されたドメイン名を punycode として解決します。

www.ol%C3%A9.com

になる

www.olé.com

punycode では次のように変換されます。

www.xn--ol-cja.com

Web ブラウザは通常、大文字を小文字に変換します。たとえば、 と は両方とも同じ DNS ホスト名 ( ) にwww.olé.com変換されます。www.olÉ.comwww.xn--ol-cja.comwww.olÉ.comwww.olé.com

IDN ドメイン名をチェックして、punycode 変換後のドメイン名がどのように見えるかを確認するには、次の 2 つのツールをお勧めします。

Verisign の IDN ツールは、はるかに厳密です。両方のツールを入力として試して、www.olÉ.com私の意味を確認してください。

IDNA (アプリケーションの国際化ドメイン名) のルールは複雑ですが、一見の価値がある主な RFC が 2 つあります。

  • アプリケーションの国際化ドメイン名 (IDNA): 背景、説明、根拠
    https://www.rfc-editor.org/rfc/rfc5894
  • アプリケーションの Unicode コード ポイントと国際化ドメイン名
    https://www.rfc-editor.org/rfc/rfc5892

rfc5894 セクション 3.1.3では、次の場合に文字許可されない可能性があると指定されています。

  • 文字は、Unicode の大文字と小文字の折り畳みによって別の文字にマップされる大文字形式またはその他の形式です。
于 2015-10-30T03:05:39.157 に答える