[4] [DFN[[RUBYB[[[ホスト]]]@en[host]]]]は、[[ドメイン名]]または[[IPアドレス]]です。

* 仕様書

[REFS[
- [2] '''[CITE@en[URL Standard]] ([TIME[2015-09-18 15:38:29 +09:00]] 版) <https://url.spec.whatwg.org/#concept-host>'''
- [30] [CITE@en[URL Standard]] ([TIME[2016-08-25 16:02:43 +09:00]]) <https://url.spec.whatwg.org/#concept-host-parser>
- [161] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-03-31 07:16:44 +09:00]] 版) <https://html.spec.whatwg.org/#concept-origin-tuple>
- [11] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-03-14 22:44:13 +09:00]] 版) <https://html.spec.whatwg.org/#dom-location-hostname>
]REFS]

* 意味

[3] [DFN[[RUBYB[[[ホスト]]]@en[host]]]]は、[[ドメイン]]、[[IPv4アドレス]]、[[IPv6アドレス]]、
[[不透明ホスト]]、[[空ホスト]]のいずれかです [SRC[>>2]]。

[FIG(railroad)[
= |
== [[ドメイン]]
== [[IPv4アドレス]]
== [[IPv6アドレス]]
== [[不透明ホスト]]
== [[空ホスト]]
]FIG]

[5] 普通は[[ホスト]]は[[ネットワークアドレス]]となりますが、
時たま[[ネットワークアドレス]]が不要な場面の [[URL]] において[[不透明]]な[[識別子]]として利用
(濫用) されます。 [SRC[>>2]]

* 文脈

[162] [[項組起源]]の [DFN[[F[ホスト]]]] [SRC[>>161]] は、
[[起源]]のうちの[[ホスト]]の部分を表しています。

;; [[項組起源]]参照。

* 構文解析

[29] [DFN[[RUBYB[ホスト構文解析器]@en[host parser]]]]は、
[[文字列]][VAR[入力]]と[VAR[[[非特殊]]]] (既定値[[偽]])
について、次のようにします [SRC[>>30]]。

[FIG(steps)[
= [33] [VAR[入力]]の先頭が [CODE[U+005B]] の場合、
== [34] [VAR[入力]]の末尾が [CODE[U+005D]] でなければ、
=== [35] [[構文違反]]です。
=== [36] [[失敗]]を返し、ここで停止します。
== [38] [VAR[入力]]の先頭と末尾の[[文字]]を除去します。
== [37] [VAR[入力]]に [[IPv6構文解析器]]を適用した結果を返し、ここで停止します。
= [57] [VAR[非特殊]]が[[真]]の場合、
== [58] [VAR[入力]]に[[不透明ホスト構文解析器]]を適用した結果を返し、
ここで停止します。
= [39] [VAR[ドメイン]]を、[VAR[入力]]を[[文字列パーセント復号]]し、
[[BOMなしUTF-8復号]]した結果に設定します。
= [40] [VAR[ASCIIドメイン]]を、 [VAR[ドメイン]]に[[ドメインをASCIIに]]を適用した結果に設定します。
= [41] [VAR[ASCIIドメイン]]が[[失敗]]なら、
== [42] [[失敗]]を返し、ここで停止します。
= [43] [VAR[ASCIIドメイン]]に次のいずれかが含まれる場合、
[FIG(list short)[
- [CODE[U+0000]]
- [CODE[U+0009]]
- [CODE[U+000A]]
- [CODE[U+000D]]
- [CODE[U+0020]]
- [CODE[#]]
- [CODE[%]]
- [CODE[/]]
- [CODE[:]]
- [CODE[?]]
- [CODE[@]]
- [CODE[U+005B]]
- [CODE[U+005C]]
- [CODE[U+005D]]
]FIG]
== [44] [[構文違反]]とします。
== [45] [[失敗]]を返し、ここで停止します。
= [46] [VAR[IPv4ホスト]]を、[VAR[ASCIIドメイン]]に [[IPv4構文解析器]]を適用した結果に設定します。
= [49] [VAR[IPv4ホスト]]により、
[FIG(switch)[
: [[失敗]] : 
[[失敗]]を返します。
: [[IPv4アドレス]] :
[VAR[IPv4ホスト]]を返します。
: [[ドメイン]] :
[VAR[ASCIIドメイン]]を返します。
]FIG]
]FIG]

[31] 次の場面で呼び出されます。
[FIG(short list)[
- [[URL構文解析器]]
- [CODE(JS)@en[document.domain]]
- [[登録可能ドメイン接尾辞であるか等しい]]
- [CODE[no_proxy]] ([[Web Transport Processing]])

[HISTORY[
- [CODE(DOMm)@en[domainToASCII]]
- [CODE(DOMm)@en[domainToUnicode]]
]HISTORY]
]FIG]

* API

[7] [CODE(DOMi)@en[[[URLUtils]]]] [[インターフェイス]]の
[DFN[[CODE(DOMa)@en[[[hostname]]]]]] [[IDL属性]] [SRC[>>8]]
は、[[ホスト]]を表します。

;; [9] [CODE(DOMa)@en[[[host]]]] [[IDL属性]]は、[[ホスト]]と[[ポート]]を表します。

** 性質

[20] この[[属性]]は、 [CODE(xattr IDL)@en[Unforgeable]] です [SRC[>>11]]。

** 取得器

[16] [CODE(JS)@en[location.hostname]] の[[取得器]]は、次のようにしなければ[MUST[なりません]]
[SRC[>>11]]。

[FIG(steps)[
= [24] [[文脈オブジェクト]]の[F[[[関係する[CODE(DOMi)@en[Document]]]]]]の[F[起源][文書の起源]]と[[入口設定群オブジェクト]]の[F[起源]]が[[同じ起源ドメイン]]でなければ、
== [25] [CODE(DOMe)@en[SecurityError]] [[例外]]を[[投げ]]、ここで停止します。
= [26] [VAR[URL]]の[F[ホスト]]が [[null]] なら、
== [27] [[空文字列]]を返してここで停止します。
= [28] [VAR[URL]]の[F[ホスト]]に[[ホスト直列化器]]を適用した結果を返します。
]FIG]

** 設定器

[12] [CODE(JS)@en[location.hostname]] の[[設定器]]は、次のようにしなければ[MUST[なりません]]
[SRC[>>11]]。

[FIG(steps)[
= [21] [VAR[入力]]を、与えられた値を [CODE(IDL)@en[USVString]] として解釈した結果に設定します。
= [13] [[文脈オブジェクト]]の[F[[[関係する[CODE(DOMi)@en[Document]]]]]]の[F[起源][文書の起源]]と[[入口設定群オブジェクト]]の[F[起源]]が[[同じ起源ドメイン]]でなければ、
== [14] [CODE(DOMe)@en[SecurityError]] [[例外]]を[[投げ]]、ここで停止します。
= [15] [VAR[複製]]を、[[文脈オブジェクト]]の[F[URL][Location (DOM)]] に設定します。
= [17] [VAR[複製]]の[F[cannot-be-a-base-URL flag]]が設定されていれば、ここで停止します。
= [18] [VAR[入力]]に[[基本URL構文解析]]を適用します。
[VAR[URL]] は[VAR[複製]]、[VAR[状態上書き]]は [[hostname state]] とします。
= [19] [[文脈オブジェクト]]と [VAR[複製]]について
[[[CODE(DOMi)@en[Location]]-object-setter navigate]] を実行します。
]FIG]

* 関連

[6] 「[[ホスト]]」と「[[ドメイン]]」の用語の混乱については、[[ドメイン名]]を参照。

[1] [[authority]] も参照。

* 歴史

[10] [CITE@en[Be clear about the initial value of the Unicode flag. Fixes https://w… · whatwg/url@468be05]]
([TIME[2015-06-16 15:06:42 +09:00]] 版)
<https://github.com/whatwg/url/commit/468be056536ff579e265a65ca7cacf470f2f8040>

[REFS[
- [8] [CITE@en[URL Standard]] ([TIME[2015-09-18 15:38:29 +09:00]] 版) <https://url.spec.whatwg.org/#dom-urlutils-hostname>
]REFS]

[22] [CITE@en[Editorial: non-relative flag got renamed · whatwg/html@d360c27]]
([TIME[2016-03-31 12:40:27 +09:00]] 版)
<https://github.com/whatwg/html/commit/d360c27d44c52390441b5910d39e898160ec016d>

[23] [CITE@en[Merge effective script origin into origin · whatwg/html@8a843f2]]
([TIME[2016-03-31 18:07:53 +09:00]] 版)
<https://github.com/whatwg/html/commit/8a843f2169a6864a3024c4329528dccb2051d275>

[52] [CITE@en[Editorial: cleanup host similarly to URL]]
([[annevk]]著, [TIME[2016-11-01 00:18:24 +09:00]])
<https://github.com/whatwg/url/commit/7f9c5fd9236f9a329c48615bce5d25b50f276738>

[53] [CITE@en[Add opaque hosts]]
([[annevk]]著, [TIME[2017-01-25 04:51:54 +09:00]])
<https://github.com/whatwg/url/commit/30362553e9ce9fc706d3492bd61886e399fc94e2>

[54] [CITE@en[Editorial: point out that domain to ASCII fails on U+FFFD]]
([[annevk]]著, [TIME[2017-01-29 19:26:14 +09:00]])
<https://github.com/whatwg/url/commit/cf9854c9e03c12af19e2a249a0d9d6bec6a7419b>

[55] [CITE@en[Allow % and IPv6 addresses in non-special URL hosts]]
([[rmisev]]著, [TIME[2017-02-09 03:43:20 +09:00]])
<https://github.com/whatwg/url/commit/cdbcce62045b1614695b00cc0427f6fb0fc7ed03>

[56] [CITE@en[Remove host parser's Unicode flag as it's unnecessary]]
([[annevk]]著, [TIME[2017-02-13 23:05:28 +09:00]])
<https://github.com/whatwg/url/commit/af93f92a7b937ddacfaa7ce8c158a18a83c9c9d7>

[32] [CITE@en[Attempt to explain valid input better]]
([[annevk]]著, [TIME[2017-02-10 17:10:23 +09:00]])
<https://github.com/whatwg/url/commit/50cb9ab9d8f70cc2bc72e91976bfaea0ad0fd330>

[47] [CITE@en[Add empty host concept for file and non-special URLs]]
([[rmisev]]著, [TIME[2017-03-07 23:12:16 +09:00]])
<https://github.com/whatwg/url/commit/5807b28261e44a47e31683230137da395ddc79d8>

[48] [CITE@en[Add empty host concept for file and non-special URLs]]
([[rmisev]]著, [TIME[2017-03-07 23:12:16 +09:00]])
<https://github.com/whatwg/url/commit/5807b28261e44a47e31683230137da395ddc79d8>

[50] [CITE@en[Define percent decoding of strings]]
([[annevk]]著, [TIME[2017-10-10 21:45:20 +09:00]])
<https://github.com/whatwg/url/commit/e172261b0946036b485322976f93f50707159ce3>

[51] [CITE@en[Give host parser a suitable default for the HTML Standard]]
([[annevk]]著, [TIME[2018-05-30 16:40:26 +09:00]])
<https://github.com/whatwg/url/commit/ac532aeaf418caaa996ed05636b752f2caf118e1>

[59] [CITE@en[Give host parser a suitable default for the HTML Standard by annevk · Pull Request #388 · whatwg/url]]
([TIME[2018-06-04 18:39:17 +09:00]])
<https://github.com/whatwg/url/pull/388>