web-dev-qa-db-ja.com

IPv6 URLでホストとポートを区別するにはどうすればよいですか?

URLの形式は常に次のとおりです。

<protocol>://<Host>[:<port>]/[<path>][#<hash>]

問題は、IPv6がポートとホストの区切り文字と同じようにコロンを使用していることです。

2001:db8:1f70::999:de8:7648:6e8

しかし、これがホストであり、ポート100でHTTPを使用して接続したい場合はどうなりますか?

http://2001:db8:1f70::999:de8:7648:6e8:100/

問題は最後のコロンです。ゼロは2つのコロン(1f70から999の間)で省略されているため、「:100」がIPまたはポート番号に属しているかどうかは不明です。どうすればこれを知ることができますか?

90
rightfold

その場合の表記は、IPv6 IP番号を角括弧でエンコードすることです。

http://[2001:db8:1f70::999:de8:7648:6e8]:100/

それは RFC 3986 、セクション3.2.2:ホストです

インターネットプロトコルリテラルアドレス、バージョン6 [RFC3513]以降で識別されるホストは、IPリテラルを角かっこ( "["と "]")で囲んで区別されます。これは、URI構文で角かっこ文字を使用できる唯一の場所です。将来の未定義のIPリテラルアドレス形式を見越して、実装では、オプションのバージョンフラグを使用して、ヒューリスティックな決定に依存するのではなく、そのような形式を明示的に示す場合があります。

121
sysadmin1138