/[pub]/suikawiki/sw4data/ids/8/485.txt
Suika

Contents of /suikawiki/sw4data/ids/8/485.txt

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.104 - (hide annotations) (download)
Mon Aug 19 07:16:47 2013 UTC (11 years, 10 months ago) by wakaba
Branch: MAIN
Changes since 1.103: +5 -1 lines
File MIME type: text/plain
updated by (anon)

1 wakaba 1.21 * 起源
2 wakaba 1.2
3 wakaba 1.21 [24] [[Web]] の[[セキュリティー・モデル]]である[RUBYB[[[同一起源方針]]]@en[same-origin policy]]において、
4     [[URL]] の[[ドメイン]]等によって定まる[[資源]]の管理の単位を[DFN[[RUBY[起源]@en[オリジン]@en[origin]]]]といいます。
5    
6 wakaba 1.23 ;; [85] [[同一起源方針]]の項もご覧ください。
7    
8 wakaba 1.40 [161] [[HTML]] では[[スクリプト]]の実行の際に用いる類似した概念である[DFN[[RUBYB[実効スクリプト起源]@en[effective script origin]]]]も定義されています。
9     多くの場合は[[起源]]と同一ですが、場合によっては違う値になることもあります。
10    
11 wakaba 1.21 ** 仕様書
12    
13     [REFS[
14 wakaba 1.31 - [23] '''[CITE@en[RFC 6454 - The Web Origin Concept]] ([TIME[2011-12-12 09:13:37 +09:00]] 版) <http://tools.ietf.org/html/rfc6454>'''
15 wakaba 1.34 - [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>'''
16 wakaba 1.31 - [127] [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/#windows>
17 wakaba 1.32 - [131] [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/#origins-of-workers>
18 wakaba 1.72 - [233] [[[CODE(DOMi)@en[XMLHttpRequest]]起源]]
19     -- [231] [CITE@en-US[XMLHttpRequest]] ([TIME[2012-06-23 04:08:48 +09:00]] 版) <http://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#xmlhttprequest-origin>
20     -- [232] [CITE@en-US[XMLHttpRequest]] ([TIME[2012-06-23 04:10:36 +09:00]] 版) <http://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#dom-xmlhttprequest-open>
21     -- [229] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2012-06-23 00:59:02 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#interface-objects-and-constructors>
22 wakaba 1.82 - [248] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2012-11-16 20:26:18 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#worker-origin>
23 wakaba 1.87 - [253] [CITE@en-US[DOM Standard]] ([TIME[2012-12-20 16:17:48 +09:00]] 版) <http://dom.spec.whatwg.org/#concept-document>
24 wakaba 1.103 - [272] [CITE@en[CSS Cascading and Inheritance Level 3]] ([TIME[2013-08-09 23:50:23 +09:00]] 版) <http://dev.w3.org/csswg/css-cascade/#at-import>
25 wakaba 1.21 ]REFS]
26    
27 wakaba 1.22 ** 識別
28    
29     [25] [[起源]]は、
30 wakaba 1.35 - [[URL scheme]]、[[host]]、[[port]] の[[3項組]]と、場合によっては[RUBYB[追加のデータ]@en[extra data]]
31 wakaba 1.38 - [RUBYB[大域的に固有な識別子]@en[globally unique identifier]]
32     -- [[HTML]] では「[RUBYB[不透明な識別子]@en[opaque identifier]]」と呼ばれています
33 wakaba 1.22
34     ... のいずれかによって表されます。
35    
36 wakaba 1.23 [37] 大域的に固有な識別子は、他のすべての[[起源]]と異なる任意の値です。 [SRC[>>23 2.3.]]
37    
38     ;; [38] 通常は大域的に固有な識別子は[[利用者エージェント]]の外に露出することが無いので、
39     特定[[プロセス]]内の連番など任意の方法で決定できます。
40    
41     [39] [[HTTP]] などで[[起源]]をやり取りする必要がある時は、 [[URL]] の構文の[[部分集合]]によって[[直列化]]して表します。
42    
43     [EG[
44     [40] 例えば [CODE(URI)@en[http://www.example.com/foo/bar]] の[[起源]]は
45     ([CODE(URI)[http]], [CODE(URI)[www.example,com]], [CODE(URI)[80]]) の[[3項組]]によって表されます。
46     これを [[HTTP]] の [CODE(HTTP)@en[[[Origin:]]]] 欄に含める時は、
47     [CODE(URI)[http://www.example.com]] と表現します。
48     ]EG]
49    
50 wakaba 1.35 ** 追加のデータ
51    
52 wakaba 1.38 [143] [[RFC]] では[[3項組]]はそれだけですが、 [[HTML]] によれば更に場合によっては[RUBYB[追加のデータ]@en[extra data / additional data]]を加えることができます。
53 wakaba 1.35
54     [145] 追加のデータとしては、[[暗号化]]された[[接続]]を使っている時に[[サイト]]の[RUBYB[[[証明書]]]@en[certificate]]を用いることが想定されています。
55     途中で[[証明書]]が変化した時に、[[証明書]]も[[起源]]に含めることで、前後で別の[[起源]]として扱われるようになります。
56     [SRC[>>135]]
57    
58     ;; [146] 従って[[中間者攻撃]] ([[MITM]]) に対する防御となります。
59    
60 wakaba 1.36 [149] この規定は >>147 で追加されたもので、当時は [[URL]] の[[起源]]に関する規定において[[証明書]]を[[起源]]に含めても構わない状況が明記されていましたが、
61     >>148 で当該部分が [[RFC]] に委ねるとして削除され、しかし [[RFC]]
62     には相当する規定が含まれなかったため、宙に浮いてしまっています。
63    
64     [REFS[
65     - [147] [CITE@en[Web Applications 1.0 r1839 Allow the origin to include extra data, such as the host's certificate. (credit: el)]] ([TIME[2008-07-02 08:09:00 +09:00]] 版) <http://html5.org/tools/web-apps-tracker?from=1838&to=1839>
66     - [148] [CITE@en[Web Applications 1.0 r6728 Defer to the origin spec for URL origin.]] ([TIME[2011-10-22 07:20:00 +09:00]] 版) <http://html5.org/tools/web-apps-tracker?from=6727&to=6728>
67     ]REFS]
68 wakaba 1.35
69 wakaba 1.25 ** 比較
70 wakaba 1.23
71 wakaba 1.38 *** RFC における定義
72    
73 wakaba 1.23 [81] 2つの[[起源]]が「[RUBYB[同じ]@en[same]]」である時、その時に限って[RUBYB[同一]@en[identical]]です。
74     具体的には、
75     - [82] 2つの[[起源]]が共に [[scheme]]/[[host]]/[[port]] の[[3項組]]であるなら、
76     3つがそれぞれ[RUBYB[同一]@en[identical]]であるなら、その場合に限って[RUBYB[同じ]@en[same]]です。
77     - [83] 大域的に固有な識別子は、 [[scheme]]/[[host]]/[[port]] の[[3項組]]と[RUBYB[同じ]@en[same]]であることはありません。
78    
79     ... と定義されています。 [SRC[>>23 5.]]
80    
81 wakaba 1.24 ;; [87] あまり意味がないからか自明だからか仕様上明記されていませんが、[[起源]]が共に大域的に固有な識別子である時も、
82     それが同じ値であるなら、その場合に限って、同じ[[起源]]であるはずです。
83    
84 wakaba 1.23 [84] 2つの[[URL]]は、その[[起源]]が[RUBYB[同じ]@en[same]]なら、[RUBYB[[[同一起源]]]@en[same-origin]]です。
85     [SRC[>>23 5.]]
86    
87     ;; [86] 同じ[[URL]]であるからといって[[起源]]も同じとは限りません。例えば [CODE(URI)@en[[[data:]]]]
88     [[URL]] は毎回新しい大域的に固有な識別子が割り振られるため、違う[[起源]]になります。
89    
90 wakaba 1.38 *** HTML における定義
91    
92     [150] 次の[[手順]]が[[真]]を返す時、2つの[[起源]]は[DFN[[RUBYB[同一起源]@en[same origin]]]]です。 [SRC[>>135]]
93     = [151] [VAR[A]], [VAR[B]] をそれぞれ比較する2つの[[起源]]としまう。
94     = [152] [VAR[A]] と [VAR[B]] が共に不透明な識別子であり、その値が等しければ、[[真]]を返します。
95     = [153] そうでなく、 [VAR[A]] と [VAR[B]] の一方または両方が不透明な識別子なら、[[偽]]を返します。
96     = [154] [VAR[A]] と [VAR[B]] の [[scheme]] 部品が[RUBYB[同一]@en[identical]]でなければ、[[偽]]を返します。
97     = [155] [VAR[A]] と [VAR[B]] の [[host]] 部品が同一でなければ、[[偽]]を返します。
98     = [156] [VAR[A]] と [VAR[B]] の [[port]] 部品が同一でなければ、[[偽]]を返します。
99     = [157] [VAR[A]] と [VAR[B]] の一方が追加のデータを持ち、双方同一でなければ、[[偽]]を返します。
100     = [158] [[真]]を返します。
101    
102     ;; [159] [[RFC]] の定義とは違ってすべての場合が明確に規定されています。
103    
104 wakaba 1.55 *** 起源横断
105    
106     [207] [[同一起源]]でないことを[DFN[[RUBY[[[起源横断]]]@en[クロスオリジン]@en[cross-origin]]]]であるといいます。
107    
108     [REFS[
109     - [206] [CITE@en-US[Cross-Origin Resource Sharing]] ([TIME[2012-03-01 15:01:30 +09:00]] 版) <http://dvcs.w3.org/hg/cors/raw-file/tip/Overview.html#cross-origin>
110     ]REFS]
111    
112 wakaba 1.25 ** 直列化
113    
114 wakaba 1.34 [136] [[起源]]の[[直列化]]については、 [[RFC]] と [[HTML]] で2つの微妙に異なる定義がなされています。
115     [SRC[>>25 6.]], [SRC[>>135]]
116    
117     ;; [137] 元々 [[HTML]] にあった定義をコピーして [[IETF]] 版を作った時に政治的な理由か何かで書き換わったのでしょう。
118    
119 wakaba 1.39 [160] [[ASCII直列化]]と[[Unicode直列化]]の2種類があります。どちらも、大域的に固有な識別子は
120     [CODE[null]] と表現します。また [[HTML]] の定義によれば [[ASCII直列化]]できない[[host]]を含む[[起源]]は[[空文字列]]によって表されます
121     [WEAK[([[RFC]] の定義ではそのような[[起源]]の存在は考慮されていません)]]。
122    
123 wakaba 1.56 [208] [CODE(HTTP)@en[[[Access-Control-Allow-Origin:]]]] 欄では任意の[[起源]]を表す
124     [CODE(HTTP)[[[*]]]] という特別な値も認められています。
125    
126 wakaba 1.25 *** ASCII 直列化
127    
128     [88] [[起源]]の [DFN[Unicode [RUBYB[直列化]@en[serialization]]]]は、次の手順によって得られる文字列です
129 wakaba 1.34 [SRC[>>25 6.1., >>135]]。
130 wakaba 1.25
131     = [99] [[起源]]が [[URL scheme]]、[[host]]、[[port]] の[[3項組]]で''ない''なら、[[文字列]]
132     [CODE[[[null]]]] を返して停止します。
133     = [100] そうでなければ、 [VAR[result]] を[[起源]]の [[scheme]] とします。
134     = [101] [VAR[result]] の後ろに [CODE[://]] を付加します。
135 wakaba 1.34 = [102] [[RFC]] の定義: [[起源]]の [[host]] 部分を [VAR[result]] の後ろに付加します。
136     = [140] [[HTML]] の定義: [[起源]]の [[host]] 部分に [[IDNA2003]] [[ToASCII]]
137     [[演算]]を適用し、結果を [VAR[result]] の後ろに付加します。
138     -- この時、 [[AllowUnassigned]] と [[UseSTD3ASCIIRules]] の2つの[[フラグ]]は設定した状態にします。
139     -- [[host]] のいずれかの部品で [[ToASCII]] が失敗したら、[[空文字列]]を返して停止します。
140 wakaba 1.25 = [103] [[起源]]の [[port]] 部分が [[scheme]] で指定された[[プロトコル]]の[[既定のポート]]と異なっていれば、
141     [VAR[result]] の後ろに [CODE(char)[[[:]]]] を付加し、更に[[ポート番号]]を[[十進数]]で付加します。
142     = [104] [VAR[result]] を返します。
143    
144     ;; [105] >>103 は厳密には更に[[ポート番号]]を最小の桁数で (つまり[[先導0]]なしで) 表現するという制約が必要なはずです。
145    
146 wakaba 1.34 ;; [141] [[HTML]] の定義に従えば、 [[LDHラベル]]化できない [[host]] だった場合に[[起源]]は[[空文字列]]によって表されることになります。
147     [[RFC]] の定義によれば[[空文字列]]になることはありません。
148    
149 wakaba 1.33 **** 応用
150    
151     - [132] [CODE(HTTP)@en[[[Origin:]]]] ([[HTTP]])
152     - [133] [CODE(HTTP)@en[[[Origin:]]]] ([[Web Sockets]])
153    
154     *** Unicode 直列化
155 wakaba 1.25
156     [89] [[起源]]の [DFN[Unicode [RUBYB[直列化]@en[serialization]]]]は、次の手順によって得られる文字列です
157 wakaba 1.34 [SRC[>>25 6.1., >>135]]。
158 wakaba 1.25
159     = [90] [[起源]]が [[URL scheme]]、[[host]]、[[port]] の[[3項組]]で''ない''なら、[[文字列]]
160     [CODE[[[null]]]] を返して停止します。
161     = [91] そうでなければ、 [VAR[result]] を[[起源]]の [[scheme]] とします。
162     = [92] [VAR[result]] の後ろに [CODE[://]] を付加します。
163     = [93] [[起源]]の [[host]] 部分の各部品を次の手順により変換しつつ、 [CODE(char)[[[.]]]]
164     で連結して [VAR[result]] の後ろに付加します。
165 wakaba 1.34 == [139] [[RFC]] の定義:
166     === [94] 部品が [[IDNA2008]] [[Aラベル]]なら、対応する[[Uラベル]]にします。
167     === [95] そうでなければ、部品をそのまま使います。
168     == [138] [[HTML]] の定義: 部品に [[IDNA2003]] [[ToUnicode]] [[演算]]を適用します。
169 wakaba 1.25 = [96] [[起源]]の [[port]] 部分が [[scheme]] で指定された[[プロトコル]]の[[既定のポート]]と異なっていれば、
170     [VAR[result]] の後ろに [CODE(char)[[[:]]]] を付加し、更に[[ポート番号]]を[[十進数]]で付加します。
171     = [97] [VAR[result]] を返します。
172    
173     ;; [98] >>96 は厳密には更に[[ポート番号]]を最小の桁数で (つまり[[先導0]]なしで) 表現するという制約が必要なはずです。
174    
175     ;; [106] [[ASCII]] 版との違いは、 >>94 で [[Uラベル]]に変換するところだけです。
176    
177 wakaba 1.33 **** 応用
178    
179     - [134] [CODE(DOMa)@en[[[origin]]]] ([CODE(DOMi)@en[[[MessageEvent]]]])
180    
181 wakaba 1.52 *** [CODE(URI)@en[file:]] URL の起源の直列化
182    
183     [200] [CODE(URI)@en[[[file:]]]] [[URL]] の[[起源]]は実装依存となっており (>>31)、
184     そもそもそれがどのような形で表されるのか不明確です。[[3項組]]かもしれませんし、
185     大域的に固有な識別子かもしれません。どちらでもない独自の形式かもしれません
186     [WEAK[(それが仕様上明確に認められているわけではありませんが)]]。
187    
188     [201] 直列化の[[算法]]を素直に適用すれば、 [CODE[[[null]]]] が得られるはずです。
189    
190     [203] >>202 によれば [[Safari]] は「[CODE(URI)@en[[[file:]]//]]」を [CODE(HTTP)@en[[[Origin:]]]]
191     に指定することがあります。
192    
193     [REFS[
194     - [202] [CITE[httpwebrequest - Safari complains: Origin file:// is not allowed by Access-Control-Allow-Origin - Stack Overflow]] ([TIME[2012-02-29 23:39:38 +09:00]] 版) <http://stackoverflow.com/questions/6948485/safari-complains-origin-file-is-not-allowed-by-access-control-allow-origin>
195     ]REFS]
196    
197 wakaba 1.39 ** IDNA との関係
198 wakaba 1.28
199     [120] [[IDN]] について、[[起源]]の定義が [[URI]] であることから[[起源]]の決定に [[ToASCII]]
200     が必要となる場合があること、[[Unicode直列化]]を使う場面があることから[[起源]]の表記のために
201     [[ToUnicode]] が必要となる場合があることにより、[[起源]]は [[IDNA]] に依存しています。
202    
203     [122] [[RFC]] 上の[[起源]]の定義は [[IDNA2008]] に拠っていますが、 [[IDNA2003]]
204     と [[IDNA2008]] のどちらを実装するかによって結果が異なることへの注記もあります [SRC[>>23 8.4]]。
205 wakaba 1.34 [[HTML]] の[[起源]]の定義は [[IDNA2003]] に拠っています。
206 wakaba 1.28 現実の[[Webブラウザー]]が実装しているものは厳密にはどちらの仕様とも異なっています。
207    
208 wakaba 1.68 * 別名
209    
210     [226] [[起源]]や[[実効スクリプト起源]]は[DFN[[RUBYB[[[別名]]]@en[alias]]]]として定義されていることがあり、
211     その場合、その値は[[別名]]として参照している[[起源]]・[[実効スクリプト起源]]の値となります [SRC[>>135]]。
212    
213 wakaba 1.37 * URL の起源
214    
215     [26] ある [[RFC 3986]] [[URI]] の[[起源]]は次の手順により求められます [SRC[>>23 4.]]。
216     = [27] [[URL]] が[[階層的]]でない、または[[絶対URL]]でないなら、新しい大域的に固有な識別子を生成し、
217     それを返します。
218     = [28] [VAR[url-scheme]] を、 [[URL]] の [[scheme]] 部分を[[小文字]]化したものとします。
219     = [29] 実装が [VAR[url-scheme]] により表される[[プロトコル]]に対応していないなら、
220     新しい大域的に固有な識別子を生成し、それを返します。
221     = [30] [VAR[url-scheme]] が [CODE(URI)@en[[[file]]]] なら、
222     [[実装定義]]の値を返して[['''構いません''']]。
223     = [32] [VAR[url-host]] を、 [[URL]] の [[host]] 部分を[[小文字]]化したものとします。
224     -- [[小文字]]化には [[RFC 4790]] の [CODE[[[i;ascii-casemap]]]] を使います。
225     -- [[IDNA]] により [[Uラベル]]は既に[[Aラベル]]に変換されているものと仮定しています。
226     = [33] [[URL]] に [[port]] 部分がなければ、
227     == [VAR[url-port]] を、 [VAR[url-scheme]] で表される[[プロトコル]]の[[既定のポート]]とします。
228     = [34] そうでなければ、
229     == [VAR[url-port]] を、 [[URL]] の [[port]] 部分とします。
230     = [35] ([VAR[url-scheme]], [VAR[url-host]], [VAR[url-port]]) の[[3項組]]を返します。
231    
232     ;; [36] 仕様上明記されていませんが、 >>32 や >>34 で [[host]] や [[port]] を[[正準化]]する必要がありそうです。
233    
234     ;; [121] 仕様上厳密には [[RFC 3986]] [[URI]] に対して[[起源]]が定義されており、
235     [[URI]] でない [[URL]] ([[IDN]] を使ったものなど) はまず [[URI]] に変換 (できれば) する必要があります。
236     [[URI]] に変換できない [[URL]] については[[起源]]が定義されていないことになります。
237     もちろん現実の [[Webブラウザー]]においては、定義を自然に拡張した [[URL]]
238     一般について同様に[[起源]]が定義されることになります。
239    
240 wakaba 1.40 ;; [163] 以前は [[HTML]] の仕様書で [[URL]] に対して[[起源]]が定義されていましたが、
241     [[RFC]] に委ねるとして削除されてしまいました。
242    
243     [162] [[URL]] の[[実効スクリプト起源]]は[[起源]]と同じです [SRC[>>135]]。
244    
245 wakaba 1.77 ;; [242] 別名とはされていません。
246    
247 wakaba 1.37 ** [CODE(URI)@en[file:]] URL の起源
248    
249     [31] 仕様上 [CODE(URI)@en[[[file:]]]] [[URL]] の[[起源]]は[[実装]]定義となっています。
250     古い[[利用者エージェント]]は [CODE(URI)@en[[[file:]]]] [[URL]] に対して緩い制限しかかけていませんでしたが、
251     [[セキュリティー]]上の問題から最近の[[利用者エージェント]]では細かい単位で[[起源]]を設定していたりします。
252     例えば、[[ディレクトリー]]単位でアクセスを制限したり、[[ファイル]]ごとに完全に別の[[起源]]として扱ったりしています
253     [SRC[>>23 4.]]。
254    
255 wakaba 1.40 * スクリプトの起源
256    
257 wakaba 1.65 ** 所有者により決まる場合
258    
259 wakaba 1.71 [164] [[スクリプト]]の[[起源]]は[DFN[[RUBYB[所有子]@en[owner]]]]の[[起源]]の[[別名]]であり、
260     [[実効スクリプト起源]]は[[所有子]]の[[実効スクリプト起源]]の[[別名]]です。
261     [[所有子]]は[[スクリプト]]の種類により次の通り定まります。 [SRC[>>135]]
262 wakaba 1.40
263     :[CODE(HTMLe)@en[[[script]]]] [[要素]]:[CODE(HTMLe)@en[[[script]]]] [[要素]]の所属する [CODE(DOMi)@en[[[Document]]]]
264 wakaba 1.64 [SRC[>>135]]
265     :[[事象取扱器内容属性]]:[[属性]]の所属する [CODE(DOMi)@en[[[Document]]]] [SRC[>>135]]
266     :他の[[スクリプト]]により作られた[[関数]]その他のコード参照:作った[[スクリプト]] [SRC[>>135]]
267 wakaba 1.40 :[[HTTP]] [[リダイレクト]] (や[[他のプロトコルで等価なもの]]) により返された [CODE(URI)@en[[[javascript]]]] [[URL]]:
268 wakaba 1.64 [CODE(URI)@en[[[javascript:]]]] [[URL]] に[[リダイレクト]]した [[URL]] [SRC[>>135]]
269 wakaba 1.40 :[[属性]]にあった [CODE(URI)@en[[[javascript]]]] [[URL]]:
270 wakaba 1.64 [[属性]]の所属する [CODE(DOMi)@en[[[Document]]]] [SRC[>>135]]
271     :[[スタイル・シート]]にあった [CODE(URI)@en[[[javascript]]]] [[URL]]:[[スタイル・シート]]の [[URL]] [SRC[>>135]]
272 wakaba 1.41 :[[閲覧文脈]]が [[navigate]] 中の [CODE(URI)@en[[[javascript]]]] [[URL]] であって、[[利用者]]によって提供されたもの (例えば[[ブックマークレット]]):
273 wakaba 1.64 [[閲覧文脈]]の[[活性文書]]の [CODE(DOMi)@en[[[Document]]]] [SRC[>>135]]
274 wakaba 1.40 :[[閲覧文脈]]が [[navigate]] 中の [CODE(URI)@en[[[javascript]]]] [[URL]] であって、[[マーク付け]]によって提供されたもの:
275 wakaba 1.41 [[URL]] を宣言している[[要素]] (例えば [CODE(HTMLe)@en[[[a]]]] [[要素]]) の [CODE(DOMi)@en[[[Document]]]]
276 wakaba 1.64 [SRC[>>135]]
277 wakaba 1.40 :[[閲覧文脈]]が [[navigate]] 中の [CODE(URI)@en[[[javascript]]]] [[URL]] であって、[[スクリプト]]によって提供されたもの:
278 wakaba 1.64 [[URL]] を提供した[[スクリプト]] [SRC[>>135]]
279 wakaba 1.65
280     ** その他のものから決まる場合
281    
282 wakaba 1.77 [223] その他の場合、[[スクリプト]]の[[起源]]・[[実効スクリプト起源]]は次に示すように定まります。
283 wakaba 1.65
284 wakaba 1.64 :[[ワーカー]]で走っている[[スクリプト]]:[[ワーカー]]の [CODE(JS)@en[[[location]]]]
285 wakaba 1.77 [[属性]]の[[絶対URL]]の[[起源]]
286     (通常はその [[URL]] 自体から決まる[[起源]]・[[実効スクリプト起源]]であるが、
287     [CODE(URI)@en[[[data]]]] [[URL]] が[[構築子]]に指定されて作られた[[ワーカー]]ではその
288     [[entry script]] の[[起源]]・[[実効スクリプト起源]]と同じ値となる (>>243)。) [SRC[>>131]]
289 wakaba 1.40
290 wakaba 1.72 ** [CODE(DOMi)@en[XMLHttpRequest]] 起源
291    
292     [234] [DFN[[CODE(DOMi)@en[XMLHttpRequest]][RUBYB[起源]@en[origin]]]]は、基本的には
293     [[[CODE(DOMi)@en[XMLHttpRequest]]文書]]の[[起源]]です。 [SRC[>>232, >>231]]
294     つまりは [CODE(DOMi)@en[[[XMLHttpRequest]]]] に対応する [CODE(DOMi)@en[[[Window]]]]
295     [[オブジェクト]]の[[文書]]の[[起源]]です。
296    
297     [230] [[ワーカー]]にあっては、 [DFN[[CODE(DOMi)@en[XMLHttpRequest]] [RUBYB[起源]@en[origin]]]]は[[スクリプト]]の[[起源]]です [SRC[>>229]]。
298    
299     [235] [[匿名フラグ]]が立っている場合は、[[大域的に固有な識別子]]です。 [SRC[>>232]]
300    
301     [236] [CODE(DOMi)@en[[[XMLHttpRequest]]]] [[起源]]は、 [[XHR]] で[[要求]]する[[資源]]が[[同じ起源]]かどうかの判定に使われます。また、
302     [CODE(DOMa)@en[[[responseXML]]]] の [CODE(DOMi)@en[[[Document]]]] の[[起源]]としても使われます。
303    
304 wakaba 1.83 ** ワーカー起源
305    
306     [249] [DFN[[RUBYB[ワーカー起源]@en[worker origin]]]]は、 [CODE(DOMi)@en[[[WorkerGlobalScope]]]]
307     [[オブジェクト]]が作られるときに決まる[[起源]]です。 [SRC[>>248]]
308     [[エントリー・スクリプト]]の[[起源]]だったり、 [CODE(DOMi)@en[[[SharedWorker]]]]
309     [[構築子]]の引数として指定された [[URL]] の[[起源]]だったりします。
310     >>246 で導入されました。
311    
312 wakaba 1.42 * [CODE(DOMi)@en[Document]] オブジェクトの起源
313 wakaba 1.37
314 wakaba 1.74 [177] [CODE(DOMi)@en[[[Document]]]] [[オブジェクト]]の[[起源]]は次の通り定まります。
315 wakaba 1.42
316 wakaba 1.89 [FIG[
317 wakaba 1.42 - [165] [[閲覧文脈]]中にある場合であって [CODE(DOMi)@en[[[Document]]]]
318 wakaba 1.74 作成時に[[閲覧文脈]]の[[砂箱化起源閲覧文脈フラグ]]が設定された場合 [SRC[>>135]]
319 wakaba 1.69 -- '''[[起源]]''': [CODE(DOMi)@en[[[Document]]]] が作られた時に割り当てられた大域的に固有な識別子
320     -- '''[[実効スクリプト起源]]''': 初期状態では[[起源]]の[[別名]]
321 wakaba 1.74 - [167] [CODE(URI)@en[[[javascript:]]]] [[URL]] から生成された場合 [SRC[>>135]]
322 wakaba 1.69 -- '''[[起源]]''': [CODE(URI)@en[[[javascript:]]]] [[URL]] の[[スクリプト]]の[[起源]]の[[別名]]
323     -- '''[[実効スクリプト起源]]''': 初期状態では[[起源]]の[[別名]]
324 wakaba 1.74 - [168] [[ネットワーク]]から供給されたもので、 [[URL scheme]] が[[server-based naming authority]]を持つものの場合
325     [SRC[>>135]]
326 wakaba 1.69 -- '''[[起源]]''': [[[CODE(DOMi)@en[Document]]の番地]]の[[起源]]の[[別名]]
327     -- '''[[実効スクリプト起源]]''': 初期状態では[[起源]]の[[別名]]
328 wakaba 1.74 - [171] [CODE(URI)@en[[[data:]]]] [[URL]] から生成された場合 [SRC[>>135]]
329 wakaba 1.42 -- [169] [[HTTP]] [[リダイレクト]] (や[[他のプロトコルの等価なもの]]) で返された
330 wakaba 1.100 --- [DEL['''[[起源]]''': [CODE(URI)@en[[[data:]]]] [[URL]] に[[リダイレクト]]した [[URL]] の[[起源]]の[[別名]]]]
331     --- [DEL['''[[実効スクリプト起源]]''': 初期状態では[[起源]]の[[別名]]]]
332     --- [269] [CITE@en[Web Applications 1.0 r7881 Security: data: URLs shouldn't get the origin of a redirector, since that redirector might be tricked into redirecting a data: URLs by a hostile origin, thus letting that hostile origin expose a same-origin data: URL.]] ([TIME[2013-06-01 05:13:00 +09:00]] 版) <http://html5.org/tools/web-apps-tracker?from=7880&to=7881>
333     により >>254 に変更 ([[セキュリティ]]上の理由)
334 wakaba 1.42 -- [170] 他の [CODE(DOMi)@en[[[Document]]]] や[[スクリプト]]にあった場合
335 wakaba 1.69 --- '''[[起源]]''': [[navigation]] を始めた [CODE(DOMi)@en[[[Document]]]] や[[スクリプト]]の[[起源]]の[[別名]]
336     --- '''[[実効スクリプト起源]]''': 初期状態では [[navigation]] を始めた [CODE(DOMi)@en[[[Document]]]]
337     や[[スクリプト]]の[[起源]]の[[別名]]
338 wakaba 1.42 - [172] [[[CODE(DOMi)@en[Document]]の番地]]が [CODE(URI)@en[[[about:blank]]]] の場合
339 wakaba 1.70 -- [128] [[閲覧文脈]]が作られた時に割り当てられた[[起源]]
340 wakaba 1.69 --- [129] 新しい[[閲覧文脈]]が[[作成子閲覧文脈]]なら、 [SRC[>>127]]
341     ---- '''[[起源]]''': [[作成子[CODE(DOMi)@en[Document]]]]の[[起源]]の[[別名]]
342     ---- '''[[実効スクリプト起源]]''': [[作成子[CODE(DOMi)@en[Document]]]]の[[実効スクリプト起源]]の[[別名]]
343     --- [130] そうでないなら、 [SRC[>>127]]
344     ---- '''[[起源]]''': 新しい[[閲覧文脈]]が作られた時に割り当てらられた大域的に固有な識別子
345     ---- '''[[実効スクリプト起源]]''': [[起源]]の[[別名]]
346 wakaba 1.74 - [173] [CODE(HTMLe)@en[iframe]] [[[CODE(HTMLa)@en[srcdoc]]文書]]の場合 [SRC[>>135]]
347 wakaba 1.69 -- '''[[起源]]''': [[閲覧文脈]]の[[閲覧文脈包含子]]の [CODE(DOMi)@en[[[Document]]]] の[[起源]]の[[別名]]
348 wakaba 1.70 -- '''[[実効スクリプト起源]]''': [[閲覧文脈]]の[[閲覧文脈包含子]]の [CODE(DOMi)@en[[[Document]]]] の[[実効スクリプト起源]]の[[別名]]
349 wakaba 1.73 - [237] [CODE(DOMi)@en[[[XMLHttpRequest]]]] で作られた場合
350     -- '''[[起源]]''': [[[CODE(DOMi)@en[XMLHttpRequest]]起源]] (>>234)
351     -- '''[[実効スクリプト起源]]''': 初期状態では[[起源]]の[[別名]] [SRC[>>239]]
352 wakaba 1.87 - [255] [CODE(JS)@en[[[new]] [[Document]]()]] [SRC[>>253]]
353     -- '''[[起源]]''': [[大域オブジェクト]]に関連付けられた[[文書]]の[[起源]]の[[別名]]
354     -- '''[[実効スクリプト起源]]''': [[大域オブジェクト]]に関連付けられた[[文書]]の[[実効スクリプト起源]]の[[別名]]
355     - [256] [CODE(DOMm)@en[[[createDocument]]]], [CODE(DOMm)@en[[[createHTMLDocument]]]] [SRC[>>253]]
356     -- '''[[起源]]''': [[文脈オブジェクト]]に関連付けられた[[文書]]の[[起源]]の[[別名]]
357     -- '''[[実効スクリプト起源]]''': [[文脈オブジェクト]]に関連付けられた[[文書]]の[[実効スクリプト起源]]の[[別名]]
358 wakaba 1.89 - [254] 特段の規定がない場合、 [SRC['''>>253''', >>135]]
359 wakaba 1.42 -- [175] 例えば [CODE(URI)@en[[[data:]]]] [[URL]] を[[利用者]]が指定した場合
360 wakaba 1.87 -- [176] [DEL[例えば [CODE(DOMm)@en[[[createDocument]]]] で作られた場合]]
361     --- [257] これは [[HTML Living Standard]] で例示されていましたが、後に [[DOM Living Standard]]
362     で規定が追加されています (>>256)。
363 wakaba 1.73 -- [238] '''[[起源]]''': [CODE(DOMi)@en[[[Document]]]] が作られた時に割り当てられた大域的に固有な識別子
364     -- [239] '''[[実効スクリプト起源]]''': 初期状態では[[起源]]の[[別名]]
365 wakaba 1.89 -- [174] 本項は [[HTML Living Standard]] で最初に規定され、次に [[DOM Living Standard]]
366     でも規定され、 [CITE@en[Web Applications 1.0 r7732 Defer to DOM.]] ([TIME[2013-03-07 04:51:00 +09:00]] 版) <http://html5.org/tools/web-apps-tracker?from=7731&to=7732>
367     で [[DOM]] の規定を参照するよう変更されました。
368     ]FIG]
369 wakaba 1.69
370     [228] [[実効スクリプト起源]]は [CODE(DOMi)@en[[[Document]]]] の作成の時点ではここに示した通りですが、
371     [CODE(JS)@en[[[document.domain]]]] [[属性]]によって変更することもできます。
372 wakaba 1.37
373 wakaba 1.103 * スタイルシートの起源
374    
375     [FIG[
376     - [273] [CODE(CSS)@en[[[@import]]]] で参照されている[[スタイルシート]] [SRC[>>272]]
377     -- [[輸入]]元の[[スタイルシート]]の[[起源]]と同じ
378     ]FIG]
379    
380 wakaba 1.43 * オブジェクトの起源
381    
382     [178] [[HTML]] では次の各種オブジェクトの[[起源]]が定義されています [SRC[>>135]]。
383     これらについては[[実効スクリプト起源]]は意味を持たないため定義されていません。
384    
385     - [179] [[画像]]について
386     -- [180] [CODE(HTMLe)@en[[[img]]]] [[要素]]のものである場合、
387     --- [181] 画像データが [[CORS-cross-origin]] な場合
388     ---- [[画像]]が作られた時に割り当てられた大域的に固有な識別子
389     --- [182] 画像データが [[CORS-same-origin]] な場合
390 wakaba 1.71 ---- [CODE(HTMLe)@en[[[img]]]] [[要素]]の [CODE(DOMi)@en[[[Document]]]] の[[起源]]の[[別名]]
391 wakaba 1.43 - [183] [CODE(HTMLe)@en[[[audio]]]] [[要素]]と [CODE(HTMLe)@en[[[video]]]] [[要素]]について
392     -- [184] [[媒体データ]]が [[CORS-cross-origin]] な場合
393     --- [[画像]]が作られた時に割り当てられた大域的に固有な識別子
394     -- [185] [[媒体データ]]が [[CORS-same-origin]] な場合
395 wakaba 1.71 ---- [[媒体要素]]の [CODE(DOMi)@en[[[Document]]]] の[[起源]]の[[別名]]
396 wakaba 1.43 - [186] [[フォント]]について
397     -- [187] [[ダウンロード可能Webフォント]]の場合
398 wakaba 1.71 --- [[フォント]]を得るために使った ([[リダイレクト]]後の) [[絶対URL]]の[[起源]]の[[別名]]
399 wakaba 1.43 -- [188] 局所的にインストールされたシステムの[[フォント]]の場合
400 wakaba 1.71 --- [[フォント]]が使われている [CODE(DOMi)@en[[[Document]]]] の[[起源]]の[[別名]]
401 wakaba 1.43
402     ;; [189] 定義が必要ない場合、例えば [CODE(HTMLe)@en[[[object]]]] [[要素]]に表示される[[画像]]の場合の[[起源]]は定義されていません。
403    
404 wakaba 1.21 * [CODE(HTTP)@en[Origin:]] 欄 (HTTP)
405    
406 wakaba 1.27 [109] [[HTTP]] の [DFN[[CODE(HTTP)@en[[[Origin:]]]]]] [[欄]]は、[[利用者エージェント]]が当該[[要求]]を発行することとなった元の[[起源]]を表します。
407     この[[起源]]が何であるか具体的な決定方法は、当該 [[API]] 等により定義されます。 [SRC[>>21]]
408    
409 wakaba 1.21 ** 仕様書
410 wakaba 1.20
411     [REFS[
412 wakaba 1.29 - [21] '''[CITE@en[RFC 6454 - The Web Origin Concept]] ([TIME[2011-12-12 09:13:37 +09:00]] 版) <http://tools.ietf.org/html/rfc6454#section-7>'''
413 wakaba 1.30 - [125] [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/#fetch>
414 wakaba 1.29 - [123] [CITE@en-US[XMLHttpRequest]] ([TIME[2012-02-28 13:24:26 +09:00]] 版) <http://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#dom-xmlhttprequest-setrequestheader>
415 wakaba 1.60 - [213] [CITE@en-US[Cross-Origin Resource Sharing]] ([TIME[2012-03-03 09:26:46 +09:00]] 版) <http://dvcs.w3.org/hg/cors/raw-file/tip/Overview.html#resource-processing-model>
416 wakaba 1.61 - [221] [CITE@en-US[Cross-Origin Resource Sharing]] ([TIME[2012-03-03 09:39:38 +09:00]] 版) <http://dvcs.w3.org/hg/cors/raw-file/tip/Overview.html#resource-sharing-check-0>
417 wakaba 1.58 - [212] [CITE@en-US[Cross-Origin Resource Sharing]] ([TIME[2012-03-03 07:13:53 +09:00]] 版) <http://dvcs.w3.org/hg/cors/raw-file/tip/Overview.html#security>
418 wakaba 1.20 ]REFS]
419    
420 wakaba 1.27 ** 構文
421    
422     [107] [CODE(HTTP)@en[[[Origin:]]]] 欄の構文は次のように定義されています [SRC[>>21]]。
423    
424     [FIG[
425     [PRE(ABNF code)[
426     origin = "Origin:" [[OWS]] origin-list-or-null [[OWS]]
427     origin-list-or-null = %x6E %x75 %x6C %x6C / origin-list
428     origin-list = serialized-origin *( SP serialized-origin )
429     serialized-origin = [[scheme]] "://" [[host]] [ ":" [[port]] ]
430     ; <[[scheme]]>, <[[host]]>, <[[port]]> from [[RFC 3986]]
431     ]PRE]
432     ]FIG]
433    
434     [108] つまり、文字列 [CODE(HTTP)[[[null]]]] ([[小文字]]) だけ、または [[ASCII直列化]]した[[起源]]の
435     [CODE(char)[[[SP]]]] 区切りのリストとなります。
436    
437     [113] [[利用者エージェント]]は任意の[[要求]]に [CODE(HTTP)@en[[[Origin:]]]] 欄を含めて[['''構いません''']]。
438     [SRC[>>21]]
439    
440     [114] 一つの[[要求]]に複数の [CODE(HTTP)@en[[[Origin:]]]] 欄を含めては[['''なりません''']]。
441     [SRC[>>21]]
442    
443     ;; [115] 複数含まれている場合に[[鯖]]がどう解釈するべきかは規定されていません。
444    
445     ** 複数の値
446    
447     [110] [[要求]]がなされるまでに複数の[[起源]]が関わっている場合、それをすべて列挙して[['''構いません''']]。
448     [SRC[>>21]]
449    
450     [EG[
451     [111] 例えば[[リダイレクト]]が発生した時、大元の[[起源]]と[[リダイレクト]]を行った[[起源]]を列挙して構いません。
452     ]EG]
453    
454     ;; [112] 列挙の順序や[[鯖]]による解釈の方法については特に規定されていません。
455    
456     [118] 隣接する[[起源]]が[RUBYB[同じ]@en[identical]]であっては[['''なりません''']]。
457     そうなってしまう場合は片方だけ送信しなければ[['''なりません''']]。 [SRC[>>21]]
458    
459 wakaba 1.44 [191] [[fetch]] (>>126) の定義においては[[リダイレクト]]の際に複数の値を [CODE(HTTP)@en[[[Origin:]]]]
460     を入れることは認められていません。ただし明示的に禁じられているわけではなく、
461     自然に読むと複数にはならないというだけなので、実際には禁止する意図は無いかもしれません。
462    
463 wakaba 1.63 [222] [[CORS]] (>>213) でも[[鯖]]側の処理モデルにおいて、
464     [[リダイレクト]]の時に複数の値が指定され得ることに言及はされているのですが、
465     [[利用者エージェント]]側の処理モデル上はそうなる場合が記述されていません。
466    
467 wakaba 1.27 ** [CODE(HTTP)[null]]
468    
469     [116] 「[RUBYB[[[プライバシー]]重視]@en[privacy-sensitive]]」な文脈では値 [DFN[[CODE(HTTP)[[[null]]]]]]
470     を送信しなければ[['''なりません''']]。具体的に何が「[[プライバシー]]重視」な文脈かは
471     [CODE(HTTP)@en[[[Origin:]]]] 欄の仕様としては決めていませんが、[[応用]]ごとに決めることもできます。
472     [SRC[>>21]]
473    
474     [117] 値 [CODE(HTTP)[[[null]]]] はその他に[[3項組]]で表せない[[起源]]である時にも使われます。
475    
476 wakaba 1.34 ** 空文字列
477    
478     [142] [[HTML]] の定義に従えば[[起源]]の[[ASCII直列化]]が[[空文字列]]になることもありますが、
479     その場合 [CODE(HTTP)@EN[[[Origin:]]]] の値をどうするべきかは不明確です。
480    
481 wakaba 1.48 [196] >>195 によれば [[Firefox]] では[[空文字列]]が [CODE[[[null]]]] の変わりに使われることになっています。
482     古い仕様ではそうだったのかもしれません。
483    
484     [REFS[
485     - [195] [CITE@en[HTTP access control - MDN]] ([TIME[2012-02-29 23:20:44 +09:00]] 版) <https://developer.mozilla.org/en/http_access_control#Origin>
486     ]REFS]
487    
488 wakaba 1.30 ** fetch
489    
490     [126] [[fetch]] 操作においては、[[起源]]が呼び出し元により明示された場合、
491     それを [CODE(HTTP)@en[[[Origin:]]]] に使います。そうでない場合は「[[プライバシー]]重視」
492     な文脈として扱います。 [SRC[>>125]]
493    
494 wakaba 1.44 [190] [[HTML]] や [[XHR]] の仕様上定義されたあらゆる [[HTTP]] [[要求]]は [[fetch]]
495     操作経由で発行されるので、従ってこれを実装している[[Webブラウザー]]からのあらゆる [[HTTP]]
496 wakaba 1.46 [[要求]]は何らかの [CODE(HTTP)@en[[[Origin:]]]] 欄を送出し得ることになります。
497     しかしよく読むといつ [CODE(HTTP)@en[[[Origin:]]]] 欄を送出するべきかは [[RFC]] も
498     [[HTML]] も [[XHR]] も規定していません。明示的な[[起源]]の指定無しに [[fetch]]
499     が呼び出された時は [[null]] を送信しなければならない (>>126 + >>116) ということになっていますが、
500     これも無条件に送信することを強制する意図があるのかは怪しいです。
501    
502     [193] 実際の [[Webブラウザー]]は[[フォーム]]の[[提出]]や [[XHR]] などで [CODE(HTTP)@en[[[Origin:]]]]
503     を送出しますが、通常の[[文書]]の [[navigation]] などでは送出しません。
504 wakaba 1.44
505 wakaba 1.27 ** 処理モデル
506    
507 wakaba 1.60 [119] [[RFC]] では[[鯖]]による解釈の方法は特に規定されていません。
508    
509     [214] [[CORS]] では別[[起源]]への[[要求]]に対する[[鯖]] ([[資源]]) での処理モデルが規定されており、
510     その中で [CODE(HTTP)@en[[[Origin:]]]] の処理方法も規定されています。 [CODE(HTTP)@en[[[Origin:]]]]
511     に関する部分だけを抜き出すと、次の通りです。
512    
513     - [215] [CODE(HTTP)@en[[[Origin:]]]] 欄がなければ、 [[CORS]] 処理モデルの適用範囲''外''です。 [SRC[>>213]]
514 wakaba 1.61 - [216] [CODE(HTTP)@en[[[Origin:]]]] 欄の値は、
515 wakaba 1.62 -- [218] [[cross-origin request]]/[[actual request]] では [CODE(char)[[[U+0020]]]] [CODE(charname)@en[[[SPACE]]]]
516 wakaba 1.61 で分割し、得られたそれぞれの値が[[大文字・小文字不区別]]で想定している[[起源]]と一致するかを判定します。 [SRC[>>213]]
517 wakaba 1.60 -- [220] [[preflight request]] では値を直接[[大文字・小文字不区別]]で想定している[[起源]]と一致するかを判定します。
518 wakaba 1.61 ([[preflight request]] は[[リダイレクト]]に対応していないので、常に値が1つと想定しています。) [SRC[>>213, >>221]]
519 wakaba 1.60 -- [219] なお、ここでいう想定している[[起源]]は有限のリストである必要はありません。
520     - [217] [[応答]]の [CODE(HTTP)@en[[[Access-Control-Allow-Origin:]]]] 欄には [CODE(HTTP)@en[[[Origin:]]]]
521     欄の値をそのまま使うことができます。 [SRC[>>213]]
522 wakaba 1.27
523 wakaba 1.58 *** DNS による攻撃
524    
525     [210] [[鯖]]側では [CODE(HTTP)@en[[[Origin:]]]] が[[要求]]元として適切な[[起源]]かどうかチェックすることになりますが、
526     [CODE(HTTP)@en[[[Host:]]]] をチェックしておかないと攻撃者が不正な[[ドメイン名]]を当該[[鯖]]に結びつけることで意図せぬ[[要求]]を受理させることができるとされています。
527    
528     [EG[
529     [211] 例えば [CODE[corp.example]] と [CODE[corp.invalid]] があるとします。 [CODE[corp.example]]
530     が [CODE[corp.example]] に [[cross-origin request]] を行い、 [CODE(HTTP)@en[[[Origin:]] corp.example]]
531     と送ります。この時 [CODE[corp.invalid]] または[[ネットワーク]]が不正にこの[[要求]]を
532     [CODE[corp.example]] に送りつけさせることができます。すると [CODE[corp.example]] は自身からの[[要求]]を (意図せず)
533 wakaba 1.59 受け取ることになります。 [CODE[corp.example]] 側で [CODE(HTTP)@en[[[Host:]]]]
534 wakaba 1.58 をチェックすれば、[[利用者エージェント]]が本当は [CODE[corp.invalid]] に宛てて送ろうとしていたことを認識でき、
535     不適切な[[要求]]として処理できます。 ([[cross-origin request]] には [[HTTPS]] のような安全な接続を使うとより安全になります。)
536     [SRC[>>212 4.]]
537     ]EG]
538    
539 wakaba 1.21 ** 歴史
540 wakaba 1.19
541 wakaba 1.20 [22] 例によって [[IETF]] で政治的なごたごたに巻き込まれて必要以上に長くかかっています。
542     [[RFC]] になるよりずっと先に [[Webブラウザー]]で実装が進みました。
543    
544 wakaba 1.2 [1]
545     [CITE[Cross-Site Request Forgery]] ([TIME[2008-07-11 00:28:05 +09:00]] 版) <http://crypto.stanford.edu/websec/csrf/>
546    
547     [2]
548     [CITE[Origin Header for CSRF Mitigation]] ([TIME[2008-11-30 15:01:02 +09:00]] 版) <http://crypto.stanford.edu/websec/specs/origin-header/>
549    
550     [3]
551 wakaba 1.3 [[HTML5]] の[[ナビゲーション]]の[[算法]]に組み込まれたみたいです。。。
552    
553 wakaba 1.4 [4] [CITE@en[(X)HTML5 Tracking]] ([TIME[2009-01-15 07:15:24 +09:00]] 版) <http://html5.org/tools/web-apps-tracker?from=2668&to=2669>
554    
555 wakaba 1.5 [5] [CITE@en[ACTION-96: Origin removal]] ([[Henri Sivonen]] 著, [TIME[2009-01-19 08:33:27 +09:00]] 版) <http://lists.w3.org/Archives/Public/public-html/2009Jan/0210.html>
556    
557 wakaba 1.19 [6] [CITE@en[draft-abarth-origin-00 - The HTTP Origin Header]] ([TIME[2009-01-22 10:33:27 +09:00]] 版) <http://tools.ietf.org/html/draft-abarth-origin-00>
558    
559     [7] [CITE@en[(X)HTML5 Tracking]]
560     ([TIME[2009-09-29 23:36:58 +09:00]] 版)
561     <http://html5.org/tools/web-apps-tracker?from=4010&to=4011>
562    
563     [8] [CITE[IRC logs: freenode / #whatwg / 20090821]]
564     ([TIME[2009-10-12 19:18:16 +09:00]] 版)
565     <http://krijnhoetmer.nl/irc-logs/whatwg/20090821#l-235>
566    
567     [9] [CITE@en[Security/Origin - MozillaWiki]]
568     ([TIME[2009-10-09 22:03:56 +09:00]] 版)
569     <https://wiki.mozilla.org/Security/Origin>
570    
571     [20] [CITE@en[The HTTP Sec-From Header]] draft-abarth-origin-01 の頃は [CODE(HTTP)@en[[[Sec-From:]]]]
572     という名前が提案されていました。
573    
574     [10] [CITE[IRC logs: freenode / #whatwg / 20090929]]
575     ([TIME[2009-12-02 08:29:55 +09:00]] 版)
576     <http://krijnhoetmer.nl/irc-logs/whatwg/20090929>
577    
578     [11] [CITE[IRC logs: freenode / #whatwg / 20091002]]
579     ([TIME[2009-12-04 00:35:25 +09:00]] 版)
580     <http://krijnhoetmer.nl/irc-logs/whatwg/20091002#l-620>
581    
582     [12] [CITE[IRC logs: freenode / #whatwg / 20091204]]
583     ([TIME[2009-12-27 16:46:13 +09:00]] 版)
584     <http://krijnhoetmer.nl/irc-logs/whatwg/20091204#l-293>
585    
586     [13] [CITE@en[Security/Origin - MozillaWiki]]
587     ([TIME[2010-10-06 06:03:55 +09:00]] 版)
588     <https://wiki.mozilla.org/Security/Origin>
589    
590     [14] [CITE[IRC logs: freenode / #whatwg / 20101109]]
591     ( ([TIME[2010-11-18 23:22:34 +09:00]] 版))
592     <http://krijnhoetmer.nl/irc-logs/whatwg/20101109#l-206>
593    
594     [15] [CITE[drafts/origin.xml at master from abarth's ietf-websec - GitHub]]
595     ( ([TIME[2011-02-13 13:01:41 +09:00]] 版))
596     <https://github.com/abarth/ietf-websec/blob/master/drafts/origin.xml>
597    
598     [16] [CITE[IRC logs: freenode / #whatwg / 20110815]]
599     ( ([TIME[2011-08-27 15:22:54 +09:00]] 版))
600     <http://krijnhoetmer.nl/irc-logs/whatwg/20110815#l-134>
601    
602     [17] [CITE[IRC logs: freenode / #whatwg / 20111022]]
603     ( ([TIME[2011-10-23 18:08:47 +09:00]] 版))
604     <http://krijnhoetmer.nl/irc-logs/whatwg/20111022>
605    
606     [18] [CITE@en[Web Applications 1.0 r6941 Drop old origin definitions that no longer matter.]]
607     ( ([TIME[2012-01-31 09:48:00 +09:00]] 版))
608     <http://html5.org/tools/web-apps-tracker?from=6940&to=6941>
609    
610     [19] [CITE[Widget Access Request Policy]]
611     ( ([TIME[2012-02-04 04:00:27 +09:00]] 版))
612 wakaba 1.29 <http://dev.w3.org/2006/waf/widgets-access/#dfn-origin>
613    
614 wakaba 1.46 [192] [CITE[Origin Header Proposal]]
615     ( ([TIME[2011-12-28 22:11:55 +09:00]] 版))
616 wakaba 1.48 <http://people.mozilla.org/~bsterne/content-security-policy/origin-header-proposal.html>
617    
618     [194] [CITE[446344 – Implement Origin header CSRF mitigation]]
619     ( ([TIME[2012-02-29 23:10:51 +09:00]] 版))
620 wakaba 1.52 <https://bugzilla.mozilla.org/show_bug.cgi?id=446344>
621    
622     [197] [CITE[Chromium Blog: Security in Depth: New Security Features]]
623     ( ([TIME[2012-02-29 23:04:56 +09:00]] 版))
624     <http://blog.chromium.org/2010/01/security-in-depth-new-security-features.html>
625    
626     [198] [CITE[Scheme/Host/Port: RFC 6454 and RFC 6455]]
627     ( ([TIME[2012-02-16 12:42:54 +09:00]] 版))
628     <http://www.schemehostport.com/2011/12/rfc-6454-and-rfc-6465.html>
629    
630     [199] [CITE[javascript - Force Safari to include Origin header in jQuery GET request - Stack Overflow]]
631     ( ([TIME[2012-02-29 23:34:42 +09:00]] 版))
632 wakaba 1.54 <http://stackoverflow.com/questions/6417219/force-safari-to-include-origin-header-in-jquery-get-request>
633    
634     [204] [CITE@en-us[AJAX - Introducing Cross-domain Request (XDR)]]
635     ( ([TIME[2012-02-29 23:41:40 +09:00]] 版))
636     <http://msdn.microsoft.com/en-us/library/ie/dd573303(v=vs.85).aspx>
637    
638     ** 実装
639    
640     [205] [CODE(HTTP)@en[[[Origin:]]]] はまだ十分 [[interoperable]] に実装されていません。
641     別の[[起源]]への [[XHR]]+[[CORS]] [[POST]] では [[Chrome]] も [[Firefox]]
642     も [CODE(HTTP)@en[[[Origin:]]]] を送りますし、 [[XDR]] では [[IE]]
643     も送りますが、[[フォーム]]の [[POST]] で送るのは [[WebKit]] だけです。
644     また、同じ[[起源]]の時に送るのも [[Chrome]] だけです。 [TIME[2012-03-01T14:14:48.300Z]]
645    
646     ** 関連
647    
648     [124] [CODE(HTTP)@en[[[Origin:]]]] を [CODE(DOMi)@en[[[XMLHttpRequest]]]] で[[著者]]が指定することはできません
649     [SRC[>>123]]。
650 wakaba 1.58
651 wakaba 1.68 * 歴史
652    
653     [227] [[起源]] (や [[SOP]]) の概念は [[Netscape]] による [[JavaScript]] の開発以来、
654     次第に明確になってきましたが、長らく仕様として文書化されるには至りませんでした。
655     しかし2000年代の後半になり、ようやく [[RFC 6454]] と [[HTML]] によってその仕様が正確に記述されることとなりました。
656    
657     [REFS[
658     - [224] [CITE[IRC logs: freenode / #whatwg / 20120524]]
659     ( ([TIME[2012-06-02 23:29:34 +09:00]] 版))
660     <http://krijnhoetmer.nl/irc-logs/whatwg/20120524>
661     - [225] [CITE@en[Web Applications 1.0 r7141 Recast how origins are defined to explicitly use the concept of an origin 'alias' and fix the definitions for about:blank docs to use this new definition.]]
662     ( ([TIME[2012-06-23 07:37:00 +09:00]] 版))
663     <http://html5.org/tools/web-apps-tracker?from=7140&to=7141>
664 wakaba 1.77 - [244] [CITE@en[Web Applications 1.0 r7180 Make data: URLs officially work in Workers.]] ([TIME[2012-07-18 06:53:00 +09:00]] 版) <http://html5.org/tools/web-apps-tracker?from=7179&to=7180>
665 wakaba 1.68 ]REFS]
666    
667     * メモ
668 wakaba 1.58
669     [209] [CITE@en-US[Cross-Origin Resource Sharing]]
670     ( ([TIME[2012-03-03 06:35:44 +09:00]] 版))
671 wakaba 1.77 <http://dvcs.w3.org/hg/cors/raw-file/tip/Overview.html#origin-request-header>
672    
673     [240] [CITE@en[Errata for The Web Origin Concept]]
674     ( ([[Anne van Kesteren]] 著, [TIME[2012-06-08 16:31:21 +09:00]] 版))
675     <http://lists.w3.org/Archives/Public/www-archive/2012Jun/0001.html>
676    
677     [241] [CITE[IRC logs: freenode / #whatwg / 20120619]]
678     ( ([TIME[2012-07-04 21:30:06 +09:00]] 版))
679 wakaba 1.81 <http://krijnhoetmer.nl/irc-logs/whatwg/20120619#l-978>
680    
681     [245] [CITE[IRC logs: freenode / #whatwg / 20120718]]
682     ( ([TIME[2012-07-21 12:31:45 +09:00]] 版))
683     <http://krijnhoetmer.nl/irc-logs/whatwg/20120718#l-432>
684    
685     [246] [CITE@en[Web Applications 1.0 r7236 Recast how the origin handling is done for data: URLs in workers, and fix the shared worker origin handling for data: URLs so that you can actually reconnect to a data: shared worker.]]
686     ( ([TIME[2012-08-10 03:29:00 +09:00]] 版))
687     <http://html5.org/tools/web-apps-tracker?from=7235&to=7236>
688    
689     [247] [CITE@en[Web Applications 1.0 r7414 Require Cookies and Origin if you implement HTTP.]]
690     ( ([TIME[2012-09-27 07:52:00 +09:00]] 版))
691 wakaba 1.87 <http://html5.org/tools/web-apps-tracker?from=7413&to=7414>
692    
693     [250] [CITE[''''''[''''''whatwg'''''']'''''' Need to define same-origin policy for WebIDL operations/getters/setters]]
694     ( ([TIME[2012-12-16 03:43:41 +09:00]] 版))
695     <http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-December/038358.html>
696    
697     [251] [CITE[Define Document's origin. In related news: we now have an HTML dependenc... · 922830c · whatwg/dom]]
698     ( ([TIME[2012-12-21 13:24:34 +09:00]] 版))
699     <https://github.com/whatwg/dom/commit/922830c931d8b04d52e3482dfd9985cdcead43fe>
700    
701     [252] [CITE[Define what origin and effective script origin are in various Document c... · 2f2cdf4 · whatwg/dom]]
702     ( ([TIME[2012-12-21 13:27:21 +09:00]] 版))
703 wakaba 1.89 <https://github.com/whatwg/dom/commit/2f2cdf4a29b7ed299c38f60eb35ed98918a7f439>
704    
705     [258] [CITE@en-US[Cross-Origin Resource Sharing Standard]]
706     ( ([TIME[2012-11-10 10:50:00 +09:00]] 版))
707 wakaba 1.100 <http://fetch.spec.whatwg.org/>
708    
709     [259] [CITE[IRC logs: freenode / #whatwg / 20130401]]
710     ( ([TIME[2013-04-04 20:18:43 +09:00]] 版))
711     <http://krijnhoetmer.nl/irc-logs/whatwg/20130401#l-615>
712    
713     [260] [CITE[IRC logs: freenode / #whatwg / 20130416]]
714     ( ([TIME[2013-04-20 15:41:12 +09:00]] 版))
715     <http://krijnhoetmer.nl/irc-logs/whatwg/20130416#l-72>
716    
717     [261] <https://github.com/whatwg/fetch/commit/05a8acd40d6f65c1a6dc830896cd8366a99d267d>
718    
719     [262] [CITE[IRC logs: freenode / #whatwg / 20130418]]
720     ( ([TIME[2013-04-25 21:57:07 +09:00]] 版))
721     <http://krijnhoetmer.nl/irc-logs/whatwg/20130418#l-839>
722    
723     [263] [CITE[IRC logs: freenode / #whatwg / 20130508]]
724     ( ([TIME[2013-05-16 21:30:10 +09:00]] 版))
725     <http://krijnhoetmer.nl/irc-logs/whatwg/20130508#l-108>
726    
727     [264] [CITE[''''''[''''''websec'''''']'''''' RFC6454 (Origin) vs URI schemes unlike "http"]]
728     ( ([TIME[2013-03-07 01:20:13 +09:00]] 版))
729     <http://www.ietf.org/mail-archive/web/websec/current/msg01512.html>
730    
731     [265] [CITE@en-US[Fetch Standard]]
732     ( ([TIME[2013-05-22 07:29:17 +09:00]] 版))
733     <http://fetch.spec.whatwg.org/#http-origin-header>
734    
735     [266] [CITE[''''''[''''''whatwg'''''']'''''' Reorganizing and fixing "origin"]]
736     ( ([TIME[2013-05-22 07:53:17 +09:00]] 版))
737     <http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2013-May/039599.html>
738    
739     [267] [CITE[''''''[''''''whatwg'''''']'''''' Reorganizing and fixing "origin"]]
740     ( ([TIME[2013-05-22 07:53:17 +09:00]] 版))
741     <http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2013-May/039599.html>
742    
743     [268] [CITE@en[Web Applications 1.0 r7873 Allow data: URLs to be given download='' attribute names.]]
744     ( ([TIME[2013-05-31 07:05:00 +09:00]] 版))
745 wakaba 1.103 <http://html5.org/tools/web-apps-tracker?from=7872&to=7873>
746    
747     [270] [CITE[''''''[''''''whatwg'''''']'''''' Reorganizing and fixing "origin"]]
748     ( ([TIME[2013-07-13 09:28:35 +09:00]] 版))
749     <http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2013-July/040050.html>
750    
751     [271] [CITE[''''''[''''''whatwg'''''']'''''' Fetch: Origin header]]
752     ( ([TIME[2013-07-23 21:15:30 +09:00]] 版))
753 wakaba 1.104 <http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2013-July/040196.html>
754    
755     [274] [CITE@en[Bug 20701 – Location security restrictions are over-restrictive]]
756     ( ([TIME[2013-08-19 07:16:36 +09:00]] 版))
757     <https://www.w3.org/Bugs/Public/show_bug.cgi?id=20701>

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24