/
653.txt
225 lines (179 loc) · 9.7 KB
/
653.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
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
[1] [[URL]] は[DFN[[RUBYB[[[起源]]]@en[origin]]]]を持ちます。多くの場合、 [[URL]] の[[起源]]は
[[URL scheme]] と [[authority]] から決まります。
;; [2] [[起源]]一般については、[[起源]]の項を参照。
[8] [[URL]] の[[起源]]は、[[文書]]の[[起源]]などの定義に使われる、
[[起源]]の基礎となるものです。
* 仕様書
[REFS[
- [300] '''[CITE@en-US[URL Standard]] ([TIME[2014-06-27 13:17:26 +09:00]] 版) <http://url.spec.whatwg.org/#origin>'''
- [135] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2012-02-22 20:11:59 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#origin>
]REFS]
* 定義
[301] [[URL]] [VAR[URL]] の[[起源]]は、次の手順が返す値です [SRC[>>300]]。
[FIG(steps)[
= [21] [VAR[URL]] の [F[scheme][URL scheme]] により、
[FIG(switch)[
: [CODE(URI)@en[http]], [CODE(URI)@en[https]], [CODE(URI)@en[ftp]],
[CODE(URI)@en[ws]], [CODE(URI)@en[wss]] のいずれかの場合 :
[[項組起源]]を返します。
[FIG(list members)[
[FIGCAPTION[
[[項組起源]]
]FIGCAPTION]
: [F[scheme][URL scheme]] : [VAR[URL]] の [F[scheme][URL scheme]]
: [F[ホスト]] : [VAR[URL]] の[F[ホスト]]
: [F[ポート]] : [VAR[URL]] の[F[ポート]]
]FIG]
[HISTORY[
[43]
かつては
[CODE(URI)@en[gopher]]
も該当していましたが、
[TIME[令和元(2019)年][year:2019]]の改訂で変更されました。
]HISTORY]
: [CODE(URI)@en[blob]] の場合 :
[FIG(steps)[
= [36]
[VAR[URL]]
の
[F[blob URL entry]]
が [CODE[null]]
で''ない''場合、
== [37]
[VAR[URL]]
の
[F[blob URL entry]]
の[F[環境]]の[F[起源]]を返します。
= [38] それ以外の場合、
== [22] [VAR[URL2]] を、[VAR[URL]] の[F[path][URL path]] [ [N[0]] ]
に[[基本URL構文解析器]]を適用した結果に設定します。
== [24] [VAR[URL2]] が[[失敗]]の場合、
=== [25] [[不透明起源]]を返します。
== [26] それ以外の場合、
=== [27] [VAR[URL2]] の[F[起源][URLの起源]]を返します。
]FIG]
: [CODE(URI)@en[file]] の場合 :
[[実装依存]]の値を返します (>>31)。決めかねる時は[[不透明起源]]を返します。
: [[実装依存]]の [[scheme][URL scheme]] の場合 :
[[実装依存]]の方法で決めた値を返します (>>29)。
: それ以外の場合 :
[[不透明起源]]を返します。
]FIG]
]FIG]
;; [306] ここでいう [F[scheme][URL scheme]]、[F[ホスト]]、[F[ポート]]は
[[URLの構文解析]]で得られる値なので、[[正準化]]が済んだ値です。
[F[scheme][URL scheme]] や[F[ホスト]]は[[小文字]]化されています。
[EG[
[15] [CODE(URI)@en[https://www.example.com/path]] の[[起源][URLの起源]]は、
[[項組起源]] ([CODE[https]], [CODE[www.example.com]], [[null]]) です。
]EG]
[EG[
[16] [CODE(URI)@en[blob:https://www.example.com:8080/abcde]] の[[起源][URLの起源]]は、
[[項組起源]] ([CODE[https]], [CODE[www.example.com]], [N[8080]]) です。
]EG]
[EG[
[28] [CODE(URI)@en[about:blank]] の[[起源][URLの起源]]は、
新しい[[不透明起源]]です。
]EG]
[HISTORY[
[162] [[URL]] の[[実効スクリプト起源]]は[[起源]]と同じです [SRC[>>135]]。
;; [242] 別名ではありません。
]HISTORY]
;; [5] [[文書の[F[起源]]]]と[[文書の[F[URL]]]]の[F[起源]]は必ずしも一致しません。
[EG[
[9] 例えば [CODE(URI)@en[http://foo.example/hoge/fuga]] の[[起源]]は、
[CODE(URI)[http://foo.example]] (= ([CODE[http]], [CODE[foo.example]], [CODE[80]]))
です。
]EG]
[EG[
[11] 例えば [CODE(URI)@en[about:blank]] の[[起源]]は、新しい大域的に固有な識別子です。
]EG]
;; [17] 大域的に固有な識別子は、 [[URL]] ごとに新しいものが発行されます。
文字列として同じ [[URL]] であっても、[[URLの起源]]を取得する毎に異なる起源になります。
* [CODE(URI)@en[file:]] URL の起源
[31] 仕様上 [CODE(URI)@en[[[file:]]]] [[URL]] の[[起源]]は[[実装]]定義となっています。
古い[[利用者エージェント]]は [CODE(URI)@en[[[file:]]]] [[URL]] に対して緩い制限しかかけていませんでしたが、
[[セキュリティー]]上の問題から最近の[[利用者エージェント]]では細かい単位で[[起源]]を設定していたりします。
例えば、[[ディレクトリー]]単位でアクセスを制限したり、[[ファイル]]ごとに完全に別の[[起源]]として扱ったりしています
[SRC[>>23 4.]]。
;; [CODE(URI)@en[file:]] 参照。
* Web ブラウザー依存の URL scheme の起源
[29] [[URL Standard]] には明記されていませんが、実際には、
各[[Webブラウザー]]固有の [[URL scheme]]
では[[実装依存]]の方法で決定された[[起源][URLの起源]]が用いられることがあります。
[12] [[Chrome]] は、
[CODE(URI)@en[chrome://version/]] では
[CODE(HTTP)@en[[[Origin:]] chrome://version]] といったように、
[CODE(URI)@en[[[chrome:]]]] [[URL]] でも [[URL scheme]] と [[authority]]
で[[起源]]を構成しているようです。 [TIME[2015-07-07T15:23:29.800Z]]
[32] [[Chrome]] は、 [CODE(URI)@en[chrome://settings/]] や
[CODE(URI)@en[chrome://extensions/]] や [CODE(URI)@en[chrome://chrome/]] では、
[CODE(URI)@en[chrome://chrome]] を[[起源]]としているようです。
[TIME[2016-05-05T05:43:57.500Z]]
[33] [[Chrome]] は、 [CODE(URI)[chrome-devtools://devtools/bundled/inspector.html?[INS[...]]]]
のような [[URL]] のページで、 [CODE(JS)@en[document.origin]] として
[CODE[chrome-devtools://devtools]] を返します。 [TIME[2016-06-23T05:44:38.000Z]]
[13] [[Firefox]] は、 [CODE(URI)@en[[[about:mozilla]]]]
から[[要求]]を送信させると [CODE(HTTP)@en[[[Origin:]] [[null]]]]
を送ります。 [TIME[2015-07-07T15:25:37.900Z]]
[14] [[Firefox]] は、 [CODE(URI)@en[[[chrome:]]]] [[URL]] では
[CODE(HTTP)@en[[[Origin:]] chrome://global]] のように [[URL scheme]]
と [[authority]] で[[起源]]を構成するようです。 [TIME[2015-07-07T15:27:29.00Z]]
[34] [[Chrome]] は [CODE(URI)@en[view-source:]] [[URL]]
の [CODE(DOMi)@en[URL]] の [CODE(DOMa)@en[origin]] を [CODE(URI)@en[view-source://]]
とします。 [CODE(URI)@en[view-source:]] [[URL]] に [[navigate]] したとき
[CODE(JS)@en[location.href]] は [CODE(URI)@en[view-source:]] を削った [[URL]]
となり、 [CODE(URI)@en[location.origin]] はその[[URLの起源]]となり、
[CODE(JS)@en[document.origin]] や [[fetch]] の [CODE(HTTP)@en[Origin:]]
は [CODE[null]] となります。 [TIME[2016-06-26T09:25:00.500Z]]
[7] [[HbbTV 2.0]] は次のように規定しています。
[FIG(quote)[
[FIGCAPTION[
[6] ([TIME[2015-02-10 01:01:20 +09:00]] 版) <http://www.hbbtv.org/pages/about_hbbtv/HbbTV_specification_2_0.pdf#page=44>
]FIGCAPTION]
> For resources loaded via DSM-CC object carousel, the origin shall be the DVB URI in the form (as defined in
TS 102 851 [10] clause 6.3.1):
> "dvb" ":" "//" original_network_id "." transport_stream_id "." service_id "." component_tag
]FIG]
* 歴史
[3] [[URLの起源]]ははじめ [[HTML5]] (現在の [[HTML Standard]]) で規定されましたが、
後に [[RFC 6454]] に移動しました。その後更に [[URL Standard]] へと移動しました。
[REFS[
- [23] [CITE@en[RFC 6454 - The Web Origin Concept]] ([TIME[2011-12-12 09:13:37 +09:00]] 版) <http://tools.ietf.org/html/rfc6454>
]REFS]
;; [4] 詳しくは[[起源]]の項を参照してください。
[18] [CITE@en[Clarify that "new globally unique identifier" is intentional. Fixes #56. · whatwg/url@330e090]]
([TIME[2015-08-07 11:18:45 +09:00]] 版)
<https://github.com/whatwg/url/commit/330e090c53e9bebc9752757cd237a0bd71877e03>
[19] [CITE@en[Merge effective script origin into origin · whatwg/html@8a843f2]]
([TIME[2016-03-31 16:19:51 +09:00]] 版)
<https://github.com/whatwg/html/commit/8a843f2169a6864a3024c4329528dccb2051d275>
[20] [CITE@en[Align with origin changes in HTML · whatwg/url@b0e4def]]
([TIME[2016-04-06 16:48:56 +09:00]] 版)
<https://github.com/whatwg/url/commit/b0e4def5b62e0be2d75b4b7b5720a5e0ea879596>
[FIG(quote)[
[FIGCAPTION[
[30] [CITE@en[What is the 'Origin' (in Same-Origin-Policy sense) of a Google Chrome extension? - Quora]]
([TIME[2016-04-06 17:07:14 +09:00]] 版)
<https://www.quora.com/What-is-the-Origin-in-Same-Origin-Policy-sense-of-a-Google-Chrome-extension>
]FIGCAPTION]
> If you're writing JavaScript for Chrome extension, the origin is the directory structure inside the zipped up file of the extension itself.
]FIG]
[35] [CITE@en[Use File API to resolve blob: URLs and their origins]]
([[mkruisselbrink]]著, [TIME[2019-01-14 23:24:01 +09:00]])
<https://github.com/whatwg/url/commit/d2ef633869b3f31d8c7e3bb76602400e4d2c126c>
[39] [CITE@en[Origin of blob URLs doesn't match what implementations do · Issue #127 · whatwg/url]]
([TIME[2019-06-20 10:35:13 +09:00]])
<https://github.com/whatwg/url/issues/127>
[40] [CITE@en[Fix Blob Origin · Issue #20 · w3c/FileAPI]]
([TIME[2019-06-20 10:41:04 +09:00]])
<https://github.com/w3c/FileAPI/issues/20>
[41] [CITE@en["origin of a blob URL" is redundant/confusing · Issue #63 · w3c/FileAPI]]
([TIME[2019-06-20 10:41:27 +09:00]])
<https://github.com/w3c/FileAPI/issues/63>
[42] [CITE@en[Use definitions in FileAPI spec to resolve blob URLs and their origins. by mkruisselbrink · Pull Request #371 · whatwg/url]]
([TIME[2019-06-20 10:42:36 +09:00]])
<https://github.com/whatwg/url/pull/371>
[44] [CITE@en[Remove gopher case from origin algorithm]]
([[rmisev]]著, [TIME[2019-10-21 22:02:15 +09:00]])
<https://github.com/whatwg/url/commit/7ae1c691c96f0d82fafa24c33aa1e8df9ffbf2bc>