/
794.txt
184 lines (145 loc) · 7.64 KB
/
794.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
[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[入力]]について、次のようにします [SRC[>>30]]。
[FIG(steps)[
= [33] [VAR[入力]]の先頭が [CODE[U+005B]] の場合、
== [34] [VAR[入力]]の末尾が [CODE[U+005D]] でなければ、
=== [35] [[構文違反]]です。
=== [36] [[失敗]]を返し、ここで停止します。
== [38] [VAR[入力]]の先頭と末尾の[[文字]]を除去します。
== [37] [VAR[入力]]に [[IPv6構文解析器]]を適用した結果を返し、ここで停止します。
= [39] [VAR[ドメイン]]を、[VAR[入力]]に
[[UTF-8符号化]]を適用し、
[[パーセント復号]]し、
[[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>