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


87

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/

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

回答:


118

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

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

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

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


38
括弧はオプションではないことに注意してください。これは、ブラウザが数値のIPv6アドレスを識別できる唯一の明確なメカニズムです。
タイラー

ポートはブラケット内にあるべきではありませんか?
ジャヤルジョ16

2
@jayarjoいいえ。ブラケットは、コロンを含むIPアドレスと、コロンによってIPアドレスから分離されたポートとの間の曖昧さをなくすためにあります。
sysadmin1138
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.