draft-fenner-literal-zone-01

ホストとポート (URL)

[31] TCP/IPUDP/IPアドレスである、 ホストポートの組を合わせた構文が用いられることがよくあります。 URLauthority でも、この構文が用いられることが多いです。

仕様書

意味

[34] ホストポートを表します。

[35] ポートは、省略可能です。ポートが省略された場合、 既定のポートを表すと理解されます。

構文

[32] ホストは、必須です。

[33] ポートをも示すことができます。その場合、ホストの後に : を書き、その後にポートを書きます。

  1. ホスト
  2. ?
    1. :
    2. ポート

文脈

[52] ホストとポートを使う場面
[54] 節点識別子は若干構成が異なります。

URL authority

[415] http: など多くの URL では、 authorityホスト名を指定します。 直後にポート番号、直前に userinfo を指定することも可能なことが多いです。

[37] userinfo を認めないもの、利用者名は認めても合言葉は認めないものもあります。 userinfo および authority も参照。

[38] URL scheme にもよりますが、一般にホスト名が何を表しているのか正確には定義されていません。 ほとんどの場合、このホスト名インターネットDNS によって名前解決して得られる IPアドレスによって表現されるホストを意味しています。しかし名前解決の方法や結果はシステムやアプリケーションに依存しており、 イントラネット内の独自のドメイン名や、 DNS 以外の方法で解決される名前Tor.onion ドメイン名などが記述されることも少なくありません。

詳しくは名前解決を参照。

[36] 通常は IPv4IPv6ユニキャストアドレス解決されることが期待されていますが、 IP が使われるとは限りませんし、マルチキャスト等のアドレスとなることもあります。 CoAP のようにマルチキャストアドレスへの解決を特に想定したものもあります。

[42] ホストとポートを用いる具体的な URL scheme については、 authority を参照。

[55] ホスト名とポートauthority に使う URLの起源 (の直列化) として使われる場合もあります。

末尾の点

[43] ホストとしては、 FQDN の他、接尾辞を省略した形態や、 内部名の使用も特に禁止されていません。

[39] ホストとして、末尾に root domain を表す . を付けたドメイン名が用いられることも稀にあります。 しかし URL としての正規化の対象にはなっていませんから、 . が付かないドメイン名とは異なるものとして扱われるのが普通です。

[40] 例えば http://www.example.com/http://www.example.com./URLの起源は異なるとみなされますから、 JavaScript で両者のページに直接アクセスすることはできません。

[41] しかし <http://to./> のように TLD にアクセスしたい時は内部名と誤認されることを防ぐため . を明示します。

IP アドレス

[44] IPアドレスによる指定は好ましくない >>45 とされることもあります。

[46] 予約済みIPアドレスの使用も特に禁止されていません。


[428] IPv6アドレス[] で括って指定することができます。 この区切りは、ホストとポートの区切りの : と、 IPv6アドレス内部の : の区別のために必要とされています。

[429] URL ではこれらの2文字は使えないことになっていましたが、 IPv6アドレスの表記のために(だけ)使えるように変更されました。

Location インターフェイス host 属性 (DOM)

[3] URLUtils インターフェイスhost IDL属性は、 ホストポートを表します。

性質

[24] この属性は、 Unforgeable です >>4

取得器

[5] location.host取得器は、次のようにしなければなりません >>4

  1. [8] 文脈オブジェクト関係するDocument起源入口設定群オブジェクト起源同じ起源ドメインでなければ、
    1. [9] SecurityError 例外投げ、ここで停止します。
  2. [10] URLを、文脈オブジェクトURL に設定します。
  3. [6] URLホストnull なら、
    1. [7] 空文字列を返してここで停止します。
  4. [14] 結果を、URLホストホスト直列化器を適用した結果に設定します。
  5. [11] URLポートnull でなければ、
    1. [15] 結果の末尾に : を追加します。
    2. [12] 結果の末尾に URLポート整数の直列化を適用した結果を追加します。
  6. [13] 結果を返します。

設定器

[17] location.host設定器は、次のようにしなければなりません >>4

  1. [25] 入力を、与えられた値を USVString として解釈した結果に設定します。
  2. [18] 文脈オブジェクト関係するDocument起源入口設定群オブジェクト起源同じ起源ドメインでなければ、
    1. [19] SecurityError 例外投げ、ここで停止します。
  3. [20] 複製を、文脈オブジェクトURL に設定します。
  4. [22] 複製cannot-be-a-base-URL flagが設定されていれば、ここで停止します。
  5. [21] 入力基本URL構文解析を適用します。 URL複製状態上書きhost state とします。
  6. [23] 文脈オブジェクト複製について Location-object-setter navigate を実行します。

関連

[16] URL Standard の用語であるホストは、ポートを含まないホスト名部分を表します。 一方 DOM APIhost は、 ホストポートの両方を表します。

[2] hostname IDL属性ホストのみを表します。

[30] Alt-Svc: ヘッダーは、本項のホストポートの構文とは逆に、 ホストが省略可能でポートが必須の構文を採用しています。

歴史

[48] authority も参照。

ゾーン識別子

[430] IPv6 Scoped AddressIPv6アドレスの後に % で区切ってゾーン識別子を指定したもので、 解釈する環境におけるネットワークインターフェイスとそれを使ってアクセスするべき IPv6アドレスを表したものとなっています。 RFC 6874 はこれを authority として使う方法を定義しています。

[433] 区切り文字の % は、パーセント符号化して %25 とします >>431

[432] ゾーン識別子は、非予約文字はそのままでも構いませんが、それ以外はパーセント符号化します >>431。 このとき使う文字コードは特に規定されていないようです。

[434] ゾーン識別子非予約文字だけを使うべきですとされています >>431 が、 それはゾーン識別子の仕様で規定するべきことで、 URLRFC で要求するべきことではないでしょう...
[435] IPv4アドレスを使った URL でこのゾーン識別子構文に相当するものはありません。

[436] この RFC が発行される前からこの構文を実装していたWebブラウザーもあり、またパーセント符号化されていない % を区切りにしている Webブラウザーもありました >>431。 (特別に解釈しないでそのまま OS に渡していただけかもしれませんが...) ただし生の % を使った場合、その直後2文字が16進数として解釈できる場合、 2種類の解釈が可能となってしまいます。 Webブラウザー利用者URL を入力させる場合にあっては、 16進数として解釈できない場合は % だけでも %25 の意味に扱うのがよかろうとされています >>431

[437] ゾーン識別子は特定のホストでしか意味をなしませんし、むしろセキュリティー上の懸念もあります。 ですから明確な用途がある場合を除き、認めてはなりません。例えば link-local address (fe80::/10) がありますが、この RFC の執筆の時点で認められるべきなのはこれだけです。 >>431

[438] 認められない時にどうするべきなのかは述べられていません。エラーとするべきなのか、 ゾーン識別子を削って続行するべきなのか。

[439] HTTP クライアントプロキシその他中間のものは外に出す URL からゾーン識別子を削除しなければなりません >>431

[440] URL ではありませんが、 Host: ヘッダーにもゾーン識別子は含めるべきではなさそうです。 (Host: (RFC 723x) は URL (RFC 3986) の host を参照しています。)

[441] URL Standard にはこの構文は含まれていません。

[442]

http://[fe80::a%25en1]
... >>431fe80::aゾーン識別子 en1 を使ってアクセスすることを表しています。

[53] cURL - How To Use ( ()) <https://curl.haxx.se/docs/manpage.html>

Provide the IPv6 zone index in the URL with an escaped percentage sign and the interface name. Like in

  http://[fe80::3%25eth0]/

IPvFuture

[443] RFC 3986 は将来の拡張用として、 IPvFuture 構文を定義しています。 IPv6アドレスのように [] で括りますが、先頭に v1. のような版識別子がつきます。

[444] 現時点でこの構文は使われていません。また IANA登録簿もなさそうです。

[445] URL Standard にはこの構文はありません。

[449] draft-fenner-literal-zoneゾーン識別子のために

http://[v6.fe80::a+en1]
http://[v1.fe80::a_en1]
... のような構文を提案していましたが、十分な支持を得られなかったようで、数年のブランクの後 >>431 の通り IPv6アドレスの構文を拡張する形になっています。

IP アドレスを表す非標準の authority

[47] <http://[208.77.188.166]/>

FirefoxIPv4 番地 208.77.188.166 のに接続します。 Host: には 208.77.188.166 という値が使われます。

OperaIPv4 番地 208.77.188.166 のに接続します。 Host: にはおそらく [208.77.188.166] という値が使われるので、 Apache からは 400 が返ってきます。

Safariを探し続けます。

WinIE 7 ではエラーが表示されます。

[407] <http://[www.google.com]/>

いずれも Windows Vista での結果です。

[427] Windows 7 上の Chrome では、 >>47>>407 もリンク先が about:blank になりました。 解決できない URL として扱われているのでしょうか。

[26] Editorial: non-relative flag got renamed · whatwg/html@d360c27 ( 版) <https://github.com/whatwg/html/commit/d360c27d44c52390441b5910d39e898160ec016d>

[27] Merge effective script origin into origin · whatwg/html@8a843f2 ( 版) <https://github.com/whatwg/html/commit/8a843f2169a6864a3024c4329528dccb2051d275>

[28] Clarify that proxy hosts are domains and ports. (shs96c著, ) <https://github.com/w3c/webdriver/commit/29c5a9a953a8d388589ce7ee50e8c24f4c6e6c4f>

[29] Better define proxies (shs96c著, ) <https://github.com/w3c/webdriver/commit/a90db4b119de8c77875647e30b611c1c49a4349b>

[49] 27234 – Support IPv6 link-local addresses? ( 版) <https://www.w3.org/Bugs/Public/show_bug.cgi?id=27234#c2>

Yes, we're especially not keen to support these in Chrome and have repeatedly decided not to.

[50] Note that there are no plans to support <zone_id>. Fixes https://www.… · whatwg/url@ca97ec8 ( 版) <https://github.com/whatwg/url/commit/ca97ec836d3ff246d5c53f420b0eb2798f2a982c>

[51] Indicate that host is not always used as network address. Fixes https… · whatwg/url@4c0f091 ( 版) <https://github.com/whatwg/url/commit/4c0f0916e640a3b031302c0a11cfad50c3f8a2b6>

[59] 945240 - Consider making Location.href punycode non-ASCII hostnames () <https://bugzilla.mozilla.org/show_bug.cgi?id=945240>

[61] 700999 - Firefox does not appear to support IPv6 link-local addresses () <https://bugzilla.mozilla.org/show_bug.cgi?id=700999>

[62] draft-sweet-uri-zoneid-01 - An IPvFuture Syntax for IPv6 Link-Local Addresses () <https://tools.ietf.org/html/draft-sweet-uri-zoneid-01>