[24] [[Webのセキュリティーモデル][Webのセキュリティー]]である[RUBYB[[[同一起源ポリシー]]]@en[same-origin policy]]において、
[[URL]] の[[ドメイン]]等によって定まる[[資源]]の管理の単位を[DFN[[RUBY[起源]@en[オリジン]@en[origin]]]]といいます。

;; [85] [[同一起源ポリシー]]の項もご覧ください。

[292] [[起源]]は、[[URL scheme]]、[[ホスト]]、[[ポート]]などによって決まる[[資源]]群の範囲であり、[[スクリプト]]などが通常相互にアクセスできる領域を定めるものとなっています。

[EG[
[310] 例えば <http://www.example.com/hoge?aa> に [CODE(HTMLe)@en[[[iframe]]]] で
<http://www.example.org/fuga?bb> が埋め込まれているとします。外側の [CODE(DOMi)@en[[[Window]]]]
の[[起源]]は [CODE[([[http][http:]], www.example.com, [N[80]])]] で、内側の [CODE(DOMi)@en[[[Window]]]]
の[[起源]]は [CODE[([[http][http:]], www.example.org, [N[80]])]] です。両者は異なる[[起源]]に属しますから、
一方の[[スクリプト]]から他方の [[DOM]] にはアクセスできません。
]EG]

* 仕様書

[REFS[
- [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>'''
- [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>
- [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>
- [233] [[[CODE(DOMi)@en[XMLHttpRequest]]起源]]
-- [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>
-- [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>
-- [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>
- [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>
]REFS]

[HISTORY[
[293] 以前は [[RFC 6454]] [SRC[>>23]] に定義がありましたが、
現在では事実上[[廃止]]されたものとみなされています。
[[IETF]] の手続き上は未だに現行仕様扱いになっているので、
気付かずに参照する人がいます。
しかし内容が数世代古く曖昧なところもありますから、
注意が必要です。
]HISTORY]

* 呼称

[5] [[起源]] ([[origin]]) は、[[日本語]]で[[生成元]]、[[源泉]]、[[オリジン]]などと訳されることもあります。
[[起源]]セキュリティーモデルはデータの出所に基づき[[セキュリティー]]的なデータの分離境界を定めるものであり、
「[[起源]]」の語にもこの“データの出所”のような意味があります。

* 起源オブジェクト

[25] [DFN[[RUBYB[[RUBY[起][き]][RUBY[源][げん]]]@en[origin]]]]は、
[[不透明起源]]または[[項組起源]]です [SRC[>>135]]。

[EG[
[49] [CODE(URI)@en[http:]]、[CODE(URI)@en[https:]]、[CODE(URI)@en[ftp:]]
の [[URLの起源]]は、[[項組起源]]です。
]EG]

[EG[
[50] [[Webブラウザー]]の[[アドレスバー]]に [CODE(URI)@en[data:]] [[URL]]
を指定して開かれた[[文書の起源]]は、その時点で新たに作成された[[不透明起源]]です。
]EG]

[8] [[起源]]は、[[オブジェクト]]です。複数の箇所から同じ[[起源]]オブジェクトが参照されることがあります。
例えば複数の[[文書]]の[[起源][文書の起源]]が同じオブジェクトに設定される
([[起源]]を共有する) かもしれません。
その場合、当然ながら[[起源]]オブジェクトの編集はすべての参照箇所に影響します。

[47] [[起源]]の複製が他の箇所に設定されることもあります。
これは複製時点の[[起源]]オブジェクトの構成値が同じ新しいオブジェクトを作ることを意味します。
その後一方の[[起源]]オブジェクトを編集しても、他方には波及しません。

[48] [CODE(JS)@en[document.domain]] に値を設定すると、
[[起源]]オブジェクトが編集されることがあります。

[EG[
[168] 
新しい[[起源]] ([CODE[https]], [CODE[example.com]], [N[443]])
を作成し、
新しい[[起源]] ([CODE[https]], [CODE[example.com]], [N[443]])
を作成すると、
どちらも[[同じ起源]]を表すとしても、
一方を編集したときに他方には影響しないという意味で、
別のものです。


]EG]

[EG[
[167] 例えば[[起源の決定]]を参照。
]EG]

[79] [[起源]]には、[F[実効ドメイン]]が定義されます。

[HISTORY[
[226] 
[TIME[西暦2016年][2016]]の改訂までは[[起源]]を他の[[起源]]の「[DFN[[RUBYB[[[別名]]]@en[alias]]]]」
とできるとされ、 [CODE(JS)@en[document.domain]] の動作を説明するために用いられていましたが、
実際にはこの方法ではうまく説明できないことがわかり、改められました。
]HISTORY]

** 項組起源

[2] [DFN[[RUBYB[[[項組起源]]]@en[tuple origin]]]]は、
[F[scheme][URL scheme]]、
[F[ホスト]]、
[F[ポート]]、
[F[ドメイン][document.domain]]で構成される[[項組]]です [SRC[>>135]]。

[73] [[項組起源]]オブジェクトは、 [[URL]] から作られます。
この元となる [[URL]] は [[URLの構文解析]]により[[正規化]]した結果なので、
[[起源]]の各項も、[[正規化]]済みの値になります。

[74] [[scheme][URL scheme]] は、すべて[[小文字]]です。

[75] [[ホスト]]は、すべて [[ASCII]] の[[小文字]]です。

[76] [[ポート]]は、[[整数]]か [[null]] です。[[既定のポート番号]]は使わずに [[null]]
とします。

[39] [[HTTP]] などで[[起源]]をやり取りする必要がある時は、 [[URL]] 
の構文の[[部分集合]]によって[[直列化]]して表します (>>160)。

[EG[
[40] 例えば [CODE(URI)@en[http://www.example.com/foo/bar]] の[[起源]]は
([CODE(URI)[http]], [CODE(URI)[www.example,com]], [CODE(URI)[80]]) の[[3項組]]によって表されます。
これを [[HTTP]] の [CODE(HTTP)@en[[[Origin:]]]] 欄に含める時は、
[CODE(URI)[http://www.example.com]] と表現します。
]EG]

[HISTORY[
[78] かつては [[URL scheme]]、[[ホスト]]、[[ポート]]の3項だったので、
[RUBYB[[[3項組]]]@en[triple]]ということもありました。

[19] かつては[F[ポート]]は「[[手動上書き]]」なる特別な値を取ることがありました。
これは [CODE(JS)@en[document.domain]] の規定に使われていましたが、
[F[実効スクリプト起源]]と[F[起源][文書の起源]]の統合により、
特別な値を使わない形に改められました。
]HISTORY]

** 不透明起源

[3] [DFN[[RUBYB[不透明起源]@en[opaque origin]]]]は、
何らかの内部的な値で表されます [SRC[>>135]]。
自身 (同じ[[起源]]オブジェクトやその複製として作られた[[起源]]オブジェクト)
とは同じとみなされますが、それ以外とは異なるとみなされるものです。

[FIG(corollary)[
[38] 不透明な識別子は[[利用者エージェント]]の外や[[スクリプト]]に露出することが無いので、
特定[[プロセス]]内の連番など任意の方法で決定できます。
他の[[起源]]と同じか異なるかさえ判断できれば、どんな方法で実装しても構いません。
]FIG]

[HISTORY[
[37] かつては、
[RUBYB[不透明な識別子]@en[opaque identifier]]や[RUBYB[大域的に固有な識別子]@en[globally unique identifier]]と呼ばれていました。
]HISTORY]

[4] [[不透明起源]]は、[[直列化]]できません。 [CODE[null]] 
や値なしなどとして表す場合もありますが、いったんそうするとどの[[不透明起源]]を表していたかはわかrなくなります。

** その他の起源

[100] 仕様上はありませんが、実装上はそれ以外の[[起源]]も存在するかもしれません。

[104] [CODE(URI)@en[file:]] は実装依存の独自形式の[[起源]]かもしれません。

[111] [CODE(URI)@en[jar:]] が実装されている場合、独自形式の[[起源]]かもしれません。

[116] [[ブラウザー拡張]]が実装されている場合、[[項組起源]]かもしれませんし、
独自形式の[[起源]]かもしれません。

[140] [[テレビ業界]]は独自の [[URL scheme]] を使っており、
独自の[[起源]]を規定しています。

[172] 
[[Firefox]] の[[開発ツール]]で [CODE[fetch]] すると
[CODE[Origin:]] [[ヘッダー]]の値が 
[CODE[resource://devtools]]
になります。
[TIME[2025-04-11T14:12:19.900Z]]

;; [173] [[開発者ツール]]がサーバーに観測可能なのは問題なのでは...

[176]
[[URLの起源]]も参照。

* 比較

[150] [[起源]] [VAR[A]] と[[起源]] [VAR[B]] が[DFN[[RUBYB[[[同じ起源]]]@en[same origin]]]]であるとは、
次の[[手順]]が[[真]]を返すことを言います [SRC[>>135]]。
[FIG(steps)[
= [98] [VAR[A]] と [VAR[B]] が共に[[不透明起源]]なら、
== [109] [VAR[A]] と [VAR[B]] が同じなら、[[真]]を返してここで停止します。
= [101] [VAR[A]] と [VAR[B]] が共に[[項組起源]]なら、
== [102] [VAR[A]] と [VAR[B]] の [F[scheme][URL scheme]]、[F[ホスト]]、[F[ポート]]がそれぞれ同じなら、[[真]]を返してここで停止します。
= [105] [[偽]]を返します。
]FIG]

;; [106] [[不透明起源]]と[[項組起源]]の比較は、常に[[偽]]を返します。
[[項組起源]]の[F[ドメイン]]は、無視されます。
[[項組起源]]の[F[ポート]]が [[null]] となることもありますが、
[[null]] 同士なら[[真]]、一方のみ [[null]] なら[[偽]]を返します。
[[起源]]の[F[scheme][URL scheme]] や[F[ホスト]]や[F[ポート]]は作成時点で[[正規化]]されているので、
比較の際の正規化は不要です。

[153] [[同じ起源]]であるかどうかとは、基本的にはその対象の出自が同じ[[サーバー]]であるかどうかを表しています。
[[Webセキュリティー]]の最も基礎となる[[関係]]です。

-*-*-

[107] [[起源]] [VAR[A]] と[[起源]] [VAR[B]] が[DFN[[RUBYB[同じ起源ドメイン]@en[same origin-domain]]]]であるとは、
次の[[手順]]が[[真]]を返すことを言います [SRC[>>135]]。
[FIG(steps)[
= [110] [VAR[A]] と [VAR[B]] が共に同じ[[不透明起源]]なら、
== [108] [VAR[A]] と [VAR[B]] が同じなら、[[真]]を返してここで停止します。
= [112] [VAR[A]] と [VAR[B]] が共に[[項組起源]]なら、
== [113] [VAR[A]] と [VAR[B]] の[F[ドメイン]]が共に [[null]] なら、
=== [117] [VAR[A]] と [VAR[B]] の [F[scheme][URL scheme]]、[F[ホスト]]、[F[ポート]]がそれぞれ同じなら、[[真]]を返してここで停止します。
== [114] [VAR[A]] と [VAR[B]] の[F[ドメイン]]が共に [[null]] 以外なら、
=== [115] [VAR[A]] と [VAR[B]] の [F[scheme][URL scheme]] と[F[ドメイン]]がそれぞれ同じなら、
[[真]]を返してここで停止します。
= [105] [[偽]]を返します。
]FIG]

[154] [[同じ起源ドメイン]]であるかどうかとは、[[同じ起源]]かどうかと多くの場合は一致しますが、
[CODE[document.domain]] を考慮する点が異なっています。

[HISTORY[
[207] [[同一起源]]でないことを[DFN[[RUBY[[[起源横断]]]@en[クロスオリジン]@en[cross-origin]]]]であるといいます。

[REFS[
- [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>
]REFS]

[159] [[RFC 6454]] の定義 (>>81) とは違って [[HTML Standard]]
の定義はすべての場合を明確に規定していました。

[97] [[HTML Standard]] は追加データが同一であることも[[同じ起源]]の条件としていました。

[92] その後2016年3月に[[実効スクリプト起源]]との統合で改訂され、
[[同じ起源ドメイン]]の比較方法も新たに規定されました。
]HISTORY]

-*-*-

[166] 
他に、より緩い[[比較]]として、
[[同じサイト]]や[[schemeなしで同じサイト]]があります。

* 直列化

[160] [[起源]]の[[直列化]] ([[文字列]]化) は、
1つの[[ASCII文字列]]で[[起源]]を表現するものです。

[11] [[不透明起源]]は [CODE[null]] と表現されます。
[[直列化]]から元の[[起源]]を復元することはできなくなります。

[96] [[項組起源]]の[F[ドメイン]]は、[[直列化]]に反映されません。

** ASCII 直列化

[88] [[起源]][VAR[起源]]の[DFN[[RUBYB[直列化]@en[serialization]]]] 
(旧[DFN[[F[ASCII[RUBYB[直列化]@en[serialization]]][ASCII直列化]]]]) は、
次のようにして得られる[[文字列]]です [SRC[>>135]]。

[FIG(steps)[
= [99] [VAR[起源]]が[[不透明起源]]なら、
== [61] [[null]] を返します。
= [62] それ以外なら、
== [63] [VAR[起源]]を[[項組起源]]として直列化した結果を返します。
]FIG]

[HISTORY[
[64] かつての [[RFC]] [SRC[>>25 6.1.]] は、[[項組起源]]の場合に[F[ホスト]]をそのまま出力するとしていました。

[65] かつての [[HTML Standard]] [SRC[>>135]] は、
[[項組起源]]の場合に[F[ホスト]]に [[IDNA2003]] [[ToASCII]]
[[演算]]を適用た結果を出力するとしていました。
この時、 [[AllowUnassigned]] と [[UseSTD3ASCIIRules]] の2つの[[フラグ]]は設定した状態にすることとされていました。
また[F[ホスト]]のいずれかの[[部品]]で [[ToASCII]] が失敗したら、
[[空文字列]]を返して[[直列化]]の[[手続き]]を停止することになっていました。

[141] [[HTML]] の定義に従えば、 [[LDHラベル]]化できない [[host]] だった場合に[[起源]]は[[空文字列]]によって表されることになります。
[[RFC]] の定義によれば[[空文字列]]になることはありません。

[66] [[HTML Standard]] の定義はその後 [[URL Standard]] の演算を参照する形となりました。

[67] 更に2016年3月には、 [[URL Standard]] に合わせて再度整理されました。
[[起源]]オブジェクトの作成時に使われた [[URL]] が既に [[URLの構文解析]]時点で
[[ASCII]] 形に正規化されているため、[[ASCII直列化]]時点での演算は不要となっています。
]HISTORY]

;; [21] [[起源]]を構成する [[URL scheme]] や [[host]] は元々[[小文字]]に正規化されているはずですから、
[[ASCII直列化]]もすべて[[小文字]]となるはずです。

[298] これは次の場面で使われています。

[FIG(list middle)[
- [132] [CODE(HTTP)@en[[[Origin:]]]] ([[HTTP]])
- [133] [CODE(HTTP)@en[[[Origin:]]]] ([[Web Sockets]])
- [288] [CODE(HTTP)@en[[[Access-Control-Allow-Origin:]]]] ([[HTTP]])
- [286] [CODE(HTTP)@en[[[X-Frame-Options:]]]] ([[HTTP]])
- [CODE(HTTP)@en[[[Timing-Allow-Origin:]]]] ([[HTTP]])
- [CODE[ALTSVC]] [[フレーム][HTTP/2フレーム]]の[[起源][ALTSVC]][[欄]]
- [[Blob URLの直列化]]
- [CODE(DOMa)@en[[[origin]]]] ([CODE(DOMi)@en[[[MessageEvent]]]])
- [CODE(JS)@en[[[document.origin]]]] ([[DOM]])
- [CODE(DOMa)@en[origin][location.origin]] ([CODE(DOMi)@en[[[URLUtils]]]])
- [CODE(DOMa)@en[[[ancestorOrigins]]]]
- [CODE(JS)@en[self.origin]]
]FIG]

** 項組起源の直列化

[69] [[ASCII直列化]]や [[Unicode直列化]]における[[項組起源]][VAR[起源]]の[[直列化]]は、
次のものを順に連結した[[文字列]]です [SRC[>>135]]。
[FIG(list)[
= [VAR[起源]]の[F[scheme][URL scheme]]
= [CODE[://]]
= [VAR[起源]]の[F[ホスト]]に[[ホスト直列化器]]を適用した結果
= [VAR[起源]]の[F[ポート]]が [[null]] でない場合、
== [CODE[:]]
== [VAR[起源]]の[F[ポート]]に[[整数の直列化]]を適用した結果
]FIG]

[HISTORY[
[103] かつての [[RFC]] や [[HTML]] の定義では、
[[既定のポート番号]]と等しい場合には[[ポート]]を付加しない、
という規定になっていました。

[70] 2016年3月の改訂により、[[既定のポート番号]]の場合の[[起源]]の[[ポート番号]]は
[[null]] と ([[仕様書]]上は) 扱われるよう整理されたため、
現在は [[null]] かどうかの分岐になっています。

[71] かつての [[RFC]] や [[HTML]] の定義では[[ポート番号]]を最小の桁数で 
(つまり[[先導0]]なしで) 表現するよう要求していませんでしたが、
この整理により明確化されました。
]HISTORY]

** [CODE(URI)@en[file:]] URL の起源の直列化

[200] [CODE(URI)@en[[[file:]]]] [[URL]] の[[起源]]は実装依存となっており (>>31)、
そもそもそれがどのような形で表されるのか不明確です。[[項組起源]]かもしれませんし、
[[不透明起源]]かもしれません。どちらでもない独自の形式かもしれません
[WEAK[(それが仕様上明確に認められているわけではありませんが)]]。

[201] 直列化の[[算法]]を素直に適用すれば、 [CODE[[[null]]]] が得られるはずです。
しかし実装はそれ以外の値を使うことがあります。

;; [124] [CODE(URI)@en[file:]] 参照。

** 特別な値

[208] [CODE(HTTP)@en[[[Access-Control-Allow-Origin:]]]] 欄では任意の[[起源]]を表す
[CODE(HTTP)[[[*]]]] という特別な値も認められています。

[142] [[Blob URLの直列化]]では [CODE[null]] の場合にかわりに[[実装定義]]の値が使われることになっています。
実際には完全に任意の値とできるわけではなく、[[項組起源]]と衝突しない値であることが期待されます。

[31] [CODE(DOMm)@en[[[postMessage]]]] では、[[著者]] ([[スクリプト]])
が[[起源]]を指定するために [[URL]] (または特別な値 [CODE[*]]、[CODE[/]]) を使っています。

** IDNA との関係

;; [91] [[IDNA]]、[[authority]] も参照。

[HISTORY[
[120] [[IDN]] について、[[起源]]の定義が [[URI]] であることから[[起源]]の決定に [[ToASCII]]
が必要となる場合があること、[[Unicode直列化]]を使う場面があることから[[起源]]の表記のために
[[ToUnicode]] が必要となる場合があることにより、[[起源]]は [[IDNA]] に依存しています。

[122] [[RFC]] 上の[[起源]]の定義は [[IDNA2008]] に拠っていますが、 [[IDNA2003]]
と [[IDNA2008]] のどちらを実装するかによって結果が異なることへの注記もあります [SRC[>>23 8.4]]。
[[HTML]] の[[起源]]の定義は [[IDNA2003]] に拠っています。
現実の[[Webブラウザー]]が実装しているものは厳密にはどちらの仕様とも異なっています。
]HISTORY]

** その他の直列化

[HISTORY[
[296] [[ASCII直列化]]できない[[host]]を含む[[起源]]は[[空文字列]]によって表されます。

[297] [[RFC 6454]] の定義ではそのような[[起源]]の存在は考慮されていませんでした。

-*-*-

[136] [[起源]]の[[直列化]]については、 [[RFC 6454]] と [[HTML]] で微妙に定義が異なっていました。
[SRC[>>25 6.]], [SRC[>>135]]
[137] 元々 [[HTML]] にあった定義をコピーして [[IETF]] 版を作った時に政治的な理由か何かで書き換わったのでしょう。

-*-*-

[20] [[ポート]]の特別な値「[[手動上書き]]」の[[直列化]]の方法は規定されていませんが、
これを[[直列化]]しなければならない場面は無いと思われます。
]HISTORY]

[89] [[起源]][VAR[起源]]の [DFN[[F[Unicode[RUBYB[直列化]@en[serialization]]][Unicode直列化]]]]は、
次のようにして得られる[[文字列]]です [SRC[>>135]]。

[FIG(steps)[
= [90] [VAR[起源]]が[[不透明起源]]なら、
== [9] [[null]] を返します。
= [52] それ以外なら、
== [53] [VAR[ホスト]]を、[VAR[起源]]の[F[ホスト]]に設定します。
== [55] [VAR[ホスト]]が[[ドメイン]]なら、
=== [54] [VAR[ホスト]]を、[VAR[ホスト]]に [[domain to Unicode]] を適用した結果に設定しま
す。
== [58] [[項組起源]] ([VAR[起源]]の[F[scheme][URL scheme]], [VAR[ホスト]], [VAR[起源]]の[F[ポート]]) を直列化した結果を返します。
= [56] それ以外なら、
== [57] [VAR[起源]]を[[項組起源]]として直列化した結果を返します。
]FIG]

[HISTORY[
[59] かつての [[RFC]] [SRC[>>25 6.1.]] や [[HTML]] [SRC[>>135]]
は、[VAR[ホスト]]部分の[[直列化]]を次のように規定していました。

[FIG(steps)[
= [93] [[起源]]の[F[ホスト]]の各[[部品]]を次の手順により変換しつつ、 [CODE(char)[[[.]]]]
で連結して返します。
== [139] [[RFC]] の定義: 
=== [94] 部品が [[IDNA2008]] [[Aラベル]]なら、対応する[[Uラベル]]にします。
=== [95] そうでなければ、部品をそのまま使います。
== [138] [[HTML]] の定義: 部品に [[IDNA2003]] [[ToUnicode]] [[演算]]を適用します。
]FIG]

[60] [[HTML Standard]] の定義はその後 [[URL Standard]] の演算を参照する形に変更されました。

[68] 更に2016年3月に改めて [[URL Standard]] の規定に基づき整理されました。
]HISTORY]

[299] これは次の場面で使われていました。

[FIG(list middle)[
- [134] [CODE(DOMa)@en[[[origin]]]] ([CODE(DOMi)@en[[[MessageEvent]]]])
- [275] [CODE(JS)@en[[[document.origin]]]] ([[DOM]])
- [287] [CODE(DOMa)@en[origin][location.origin]] ([CODE(DOMi)@en[[[URLUtils]]]])
- [CODE(DOMa)@en[[[ancestorOrigins]]]]
- [CODE(JS)@en[self.origin]]
- [[VAPID JWT の [CODE[aud]]][VAPID]]

[HISTORY[
- [[Blob URL]]
]HISTORY]
]FIG]

[12] [[Unicode直列化]]は [[Mozilla]] では実装されていたものの、
他の [[Webブラウザー]]では実装されていませんでした。
[TIME[2017年5月][2017-05]]、[[ASCII直列化]]に統合される形で廃止されました。

[158] 
[[VAPID]] は未だに使っているようです。

-*-*-

[16] [[HOBA]] は、独自の[[直列化]]の方式を規定しています。
[[RFC 3986]] [[URI]] から [[URL scheme]]、[[authority]] ([[hostname]] の意か?)、
[[port]] を連結したもの [SRC[>>17]] とされています。ただし[[既定のポート番号]]はなく、
必ず [[port]] を明示する必要があります [SRC[>>17]]。

;; [18] なぜ素直に標準的な[[ASCII直列化]]を使わないのかは謎です。

[REFS[
- [17] [CITE@en[RFC 7486 - HTTP Origin-Bound Authentication (HOBA)]] ([TIME[2015-03-11 12:17:16 +09:00]] 版) <https://tools.ietf.org/html/rfc7486#page-8>
]REFS]

** ワイルドカード

[170] 
[[サーバー]]側の実装では[[起源]]の[[一致]]条件の記述のため[[ワイルドカードドメイン名]]が使えることがあります
[SRC[>>171]]。

[171] [CITE@en-US[CORS configuration - Amazon Simple Storage Service]], [TIME[2023-09-07T01:09:09.000Z]], [TIME[2023-09-07T03:35:29.176Z]] <https://docs.aws.amazon.com/AmazonS3/latest/userguide/ManageCorsUsing.html>


* 概念やオブジェクトの起源

[6] [[Web]] 上の色々な[[オブジェクト]]や[[概念]]に対して[[起源]]が定義されています。

[FIG(short list)[
- [[URLの[F[起源]]]]
- [[文書の[F[起源]]]]
- [[環境設定群オブジェクトの[F[起源]]]]
- [[[CODE(HTMLe)@en[img]]の起源]]
- [[媒体要素の起源]]
]FIG]

[HISTORY[
[FIG(short list)[
- [[文書]]の[F[実効スクリプト起源]]
- [[環境設定群オブジェクト]]の[F[実効スクリプト起源]]
- [[フォントの起源]]
]FIG]
]HISTORY]

** [CODE(DOMi)@en[XMLHttpRequest]] 起源

[234] [DFN[[CODE(DOMi)@en[XMLHttpRequest]][RUBYB[起源]@en[origin]]]]は、基本的には
[[[CODE(DOMi)@en[XMLHttpRequest]]文書]]の[[起源]]です。 [SRC[>>232, >>231]]
つまりは [CODE(DOMi)@en[[[XMLHttpRequest]]]] に対応する [CODE(DOMi)@en[[[Window]]]]
[[オブジェクト]]の[[文書]]の[[起源]]です。

[230] [[ワーカー]]にあっては、 [DFN[[CODE(DOMi)@en[XMLHttpRequest]] [RUBYB[起源]@en[origin]]]]は[[スクリプト]]の[[起源]]です [SRC[>>229]]。

[235] [[匿名フラグ]]が立っている場合は、[[大域的に固有な識別子]]です。 [SRC[>>232]]

[236] [CODE(DOMi)@en[[[XMLHttpRequest]]]] [[起源]]は、 [[XHR]] で[[要求]]する[[資源]]が[[同じ起源]]かどうかの判定に使われます。また、
[CODE(DOMa)@en[[[responseXML]]]] の [CODE(DOMi)@en[[[Document]]]] の[[起源]]としても使われます
([[文書の起源]]参照)。

** スタイルシートの起源

[FIG(list)[
- [273] [CODE(CSS)@en[[[@import]]]] で参照されている[[スタイルシート]] [SRC[>>272]]
-- [[輸入]]元の[[スタイルシート]]の[[起源]]と同じ
]FIG]

* 性質

[FIG(short list)[ [41] [[起源]]の性質
- [[HSTS安全起源]]
- [[条件付きHSTS安全起源]]
- [[潜在的に信頼できる起源]]
]FIG]

* 起源と適用範囲が異なる機能

[10] [[Web]] 上のいくつかの機能は、歴史的その他の理由で[[起源]]とは異なる適用範囲を持っています。
場合によっては[[セキュリティー]]上の問題となることがありますから、
注意が必要です。

[FIG(list)[
- [43] [[Cookie]] は[[サブドメイン]]にも適用されますし、[[ポート]]を無視します。
[[URL scheme]] の違いも無視されることがあります。
また [CODE(HTTP)@en[[[Path]]]] により一部の [[path]] のみに限定されます。
- [44] [[HTTP認証]]の範囲である[[保護空間]]は[[起源]]と同じ単位が基本となっていますが、
[CODE(HTTP)@en[[[realm]]]] によって限定されます。また[[認証方式]]によっては[[ホスト]]をまたぐことも禁止はされていません。
[CODE(HTTP)@en[[[domain=""]]]] [[引数]]で[[起源]]とは無関係に[[保護空間]]を規定することができます。
- [[HSTS]]・[[PKP]] はすべての[[ポート]]に適用されます。
- [[HSTS]]・[[PKP]] は [CODE(HTTP)@en[[[includeSubdomains]]]] を指定すると[[サブドメイン]]にも適用されるようになります。
- [[HTTPS]] の[[証明書]]は[[ドメイン名]]のみ示すもので、 [[URL scheme]] や[[ポート]]の情報は含まれません。
- [[HTTPS]] の[[ワイルドカード証明書]]は直下の[[サブドメイン]]に適用されます。
- [[Web Storage]] の[[容量]]制限の適用においては、[[サブドメイン]]を使って制限を回避する試みを防ぐことが求められています ([[ストレージ (Web)]] 参照)。
- [CODE(JS)@en[[[document.domain]]]] を使うと元の[[サブドメイン]]と[[ポート]]の区別が失われます。
- [[WebSocket接続の確立]]時の同時接続制限は、[[ホスト]]ではなく[[IPアドレス]]により行われます。
- [[HTTP/2接続]]を再利用できる範囲は、[[起源]]よりも広くなっています。
]FIG]

[126] [[同一起源ポリシー]]の適用対象外の項も参照してください。

[118] [[ブラウザー拡張]]、[[ウィジェット]]、[[アプリ内ブラウザー]]、
[[WebDriver]] といった類のものは必ずしも[[同一起源ポリシー]]に縛られず、
実装依存の[[セキュリティーモデル]]で管理されています。

* 関連

[155] [[部分起源]]も参照。

[128] [[HTTP]] の[[起源サーバー]]とは、語源は同じなのでしょうが、
意味は必ずしも一致しません。

[129] [[座標系]]の[[起源][座標起源]]とは無関係です。

* 歴史

[227] [[起源]] (や [[SOP]]) の概念は [[Netscape]] による [[JavaScript]] の開発以来、
次第に明確になってきましたが、長らく仕様として文書化されるには至りませんでした。
しかし2000年代の後半になり、ようやく [[RFC 6454]] と [[HTML]] によってその仕様が正確に記述されることとなりました。

[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>'''
- [224] [CITE[IRC logs: freenode / #whatwg / 20120524]]
( ([TIME[2012-06-02 23:29:34 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20120524>
- [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.]]
( ([TIME[2012-06-23 07:37:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=7140&to=7141>
- [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>
]REFS]

** RFC 6454 における同一起源の定義

[81] 2つの[[起源]]が「[RUBYB[同じ]@en[same]]」である時、その時に限って[RUBYB[同一]@en[identical]]です。
具体的には、
- [82] 2つの[[起源]]が共に [[scheme]]/[[host]]/[[port]] の[[3項組]]であるなら、
3つがそれぞれ[RUBYB[同一]@en[identical]]であるなら、その場合に限って[RUBYB[同じ]@en[same]]です。
- [83] 大域的に固有な識別子は、 [[scheme]]/[[host]]/[[port]] の[[3項組]]と[RUBYB[同じ]@en[same]]であることはありません。

... と定義されています。 [SRC[>>23 5.]]

;; [87] あまり意味がないからか自明だからか仕様上明記されていませんが、[[起源]]が共に大域的に固有な識別子である時も、
それが同じ値であるなら、その場合に限って、同じ[[起源]]であるはずです。

[84] 2つの[[URL]]は、その[[起源]]が[RUBYB[同じ]@en[same]]なら、[RUBYB[[[同一起源]]]@en[same-origin]]です。
[SRC[>>23 5.]]

;; [86] 同じ[[URL]]であるからといって[[起源]]も同じとは限りません。例えば [CODE(URI)@en[[[data:]]]]
[[URL]] は毎回新しい大域的に固有な識別子が割り振られるため、違う[[起源]]になります。

** RFC 6454 における URI の起源の定義

[26] ある [[RFC 3986]] [[URI]] の[[起源]]は次の手順により求められます [SRC[>>23 4.]]。
[FIG(steps)[
= [27] [[URL]] が[[階層的]]でない、または[[絶対URL]]でないなら、新しい大域的に固有な識別子を生成し、
それを返します。
= [28] [VAR[url-scheme]] を、 [[URL]] の [[scheme]] 部分を[[小文字]]化したものとします。
= [29] 実装が [VAR[url-scheme]] により表される[[プロトコル]]に対応していないなら、
新しい大域的に固有な識別子を生成し、それを返します。
= [30] [VAR[url-scheme]] が [CODE(URI)@en[[[file]]]] なら、
[[実装定義]]の値を返して[['''構いません''']]。
= [32] [VAR[url-host]] を、 [[URL]] の [[host]] 部分を[[小文字]]化したものとします。
-- [[小文字]]化には [[RFC 4790]] の [CODE[[[i;ascii-casemap]]]] を使います。
-- [[IDNA]] により [[Uラベル]]は既に[[Aラベル]]に変換されているものと仮定しています。
= [33] [[URL]] に [[port]] 部分がなければ、
== [VAR[url-port]] を、 [VAR[url-scheme]] で表される[[プロトコル]]の[[既定のポート]]とします。
= [34] そうでなければ、
== [VAR[url-port]] を、 [[URL]] の [[port]] 部分とします。
= [35] ([VAR[url-scheme]], [VAR[url-host]], [VAR[url-port]]) の[[3項組]]を返します。
]FIG]

;; [36] 仕様上明記されていませんが、 >>32 や >>34 で [[host]] や [[port]] を[[正準化]]する必要がありそうです。

;; [121] 仕様上厳密には [[RFC 3986]] [[URI]] に対して[[起源]]が定義されており、
[[URI]] でない [[URL]] ([[IDN]] を使ったものなど) はまず [[URI]] に変換 (できれば) する必要があります。
[[URI]] に変換できない [[URL]] については[[起源]]が定義されていないことになります。
もちろん現実の [[Webブラウザー]]においては、定義を自然に拡張した [[URL]]
一般について同様に[[起源]]が定義されることになります。

;; [163] 以前は [[HTML]] の仕様書で [[URL]] に対して[[起源]]が定義されていましたが、
[[RFC]] に委ねるとして削除されてしまいました。

** 追加のデータ

[143] [[RFC 6454]] では[[3項組]]だけでしたが、 [[HTML]] によれば更に場合によっては[RUBYB[追加のデータ]@en[extra data / additional data]]を加えることができます。

[145] 追加のデータとしては、[[暗号化]]された[[接続]]を使っている時に[[サイト]]の[RUBYB[[[証明書]]]@en[certificate]]を用いることが想定されています。
途中で[[証明書]]が変化した時に、[[証明書]]も[[起源]]に含めることで、前後で別の[[起源]]として扱われるようになります。
[SRC[>>135]]

;; [146] 従って[[中間者攻撃]] ([[MITM]]) に対する防御となります。

[15] 実際にこの規定に従っている [[Webブラウザー]]が存在するのかは不明です。

[149] この規定は >>147 で追加されたもので、当時は [[URL]] の[[起源]]に関する規定において[[証明書]]を[[起源]]に含めても構わない状況が明記されていましたが、
>>148 で当該部分が [[RFC]] に委ねるとして削除され、しかし [[RFC]]
には相当する規定が含まれなかったため、宙に浮いてしまっています。
([[RFC]] にかわる [[URL Standard]] の定義にも、[[証明書]]は用いられていません。)

[14] [[証明書]]を期限切れに伴い更新したり、[[鯖]]を構成する[[ホスト]]ごとに異なる[[公開鍵]]を提供していたり [SRC[>>13]]
する場合に[[起源]]が変わってしまって以前に保存したデータにアクセスできなくなったり、
[[フレーム]]間で通信できなかったりすると不便であり、再現しづらい互換性の問題が生じますから、
これを[[起源]]の構成要素に加えるのはあまり好ましくないのかもしれません。

;; [22] [[PKP]] の[[ピン]]と結び付けることで[[証明書]]を超えて同一性を保てるかもしれません。
しかしそのような実装の動きも無さそうです。

[REFS[
- [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>
- [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>
- [13] [CITE@en[689835 – Dns rebinding attack using cached resources]] ([TIME[2015-03-21 15:34:02 +09:00]] 版) <https://bugzilla.mozilla.org/show_bug.cgi?id=689835#c13>
]REFS]

[72] この規定は2016年3月の改訂で削除されました [SRC[>>77]]。

** RFC 6454 の廃止

[209] [CITE@en-US[Cross-Origin Resource Sharing]]
( ([TIME[2012-03-03 06:35:44 +09:00]] 版))
<http://dvcs.w3.org/hg/cors/raw-file/tip/Overview.html#origin-request-header>

[240] [CITE@en[Errata for The Web Origin Concept]]
( ([[Anne van Kesteren]] 著, [TIME[2012-06-08 16:31:21 +09:00]] 版))
<http://lists.w3.org/Archives/Public/www-archive/2012Jun/0001.html>

[241] [CITE[IRC logs: freenode / #whatwg / 20120619]]
( ([TIME[2012-07-04 21:30:06 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20120619#l-978>

[245] [CITE[IRC logs: freenode / #whatwg / 20120718]]
( ([TIME[2012-07-21 12:31:45 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20120718#l-432>

[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.]]
( ([TIME[2012-08-10 03:29:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=7235&to=7236>

[247] [CITE@en[Web Applications 1.0 r7414     Require Cookies and Origin if you implement HTTP.]]
( ([TIME[2012-09-27 07:52:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=7413&to=7414>

[250] [CITE[''''''[''''''whatwg'''''']'''''' Need to define same-origin policy for WebIDL operations/getters/setters]]
( ([TIME[2012-12-16 03:43:41 +09:00]] 版))
<http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-December/038358.html>

[251] [CITE[Define Document's origin. In related news: we now have an HTML dependenc... · 922830c · whatwg/dom]]
( ([TIME[2012-12-21 13:24:34 +09:00]] 版))
<https://github.com/whatwg/dom/commit/922830c931d8b04d52e3482dfd9985cdcead43fe>

[252] [CITE[Define what origin and effective script origin are in various Document c... · 2f2cdf4 · whatwg/dom]]
( ([TIME[2012-12-21 13:27:21 +09:00]] 版))
<https://github.com/whatwg/dom/commit/2f2cdf4a29b7ed299c38f60eb35ed98918a7f439>

[258] [CITE@en-US[Cross-Origin Resource Sharing Standard]]
( ([TIME[2012-11-10 10:50:00 +09:00]] 版))
<http://fetch.spec.whatwg.org/>

[259] [CITE[IRC logs: freenode / #whatwg / 20130401]]
( ([TIME[2013-04-04 20:18:43 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20130401#l-615>

[260] [CITE[IRC logs: freenode / #whatwg / 20130416]]
( ([TIME[2013-04-20 15:41:12 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20130416#l-72>

[261] <https://github.com/whatwg/fetch/commit/05a8acd40d6f65c1a6dc830896cd8366a99d267d>

[262] [CITE[IRC logs: freenode / #whatwg / 20130418]]
( ([TIME[2013-04-25 21:57:07 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20130418#l-839>

[263] [CITE[IRC logs: freenode / #whatwg / 20130508]]
( ([TIME[2013-05-16 21:30:10 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20130508#l-108>

[264] [CITE[''''''[''''''websec'''''']'''''' RFC6454 (Origin) vs URI schemes unlike "http"]]
( ([TIME[2013-03-07 01:20:13 +09:00]] 版))
<http://www.ietf.org/mail-archive/web/websec/current/msg01512.html>

[265] [CITE@en-US[Fetch Standard]]
( ([TIME[2013-05-22 07:29:17 +09:00]] 版))
<http://fetch.spec.whatwg.org/#http-origin-header>

[266] [CITE[''''''[''''''whatwg'''''']'''''' Reorganizing and fixing "origin"]]
( ([TIME[2013-05-22 07:53:17 +09:00]] 版))
<http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2013-May/039599.html>

[267] [CITE[''''''[''''''whatwg'''''']'''''' Reorganizing and fixing "origin"]]
( ([TIME[2013-05-22 07:53:17 +09:00]] 版))
<http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2013-May/039599.html>

[268] [CITE@en[Web Applications 1.0 r7873     Allow data: URLs to be given download='' attribute names.]]
( ([TIME[2013-05-31 07:05:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=7872&to=7873>

[270] [CITE[''''''[''''''whatwg'''''']'''''' Reorganizing and fixing "origin"]]
( ([TIME[2013-07-13 09:28:35 +09:00]] 版))
<http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2013-July/040050.html>

[271] [CITE[''''''[''''''whatwg'''''']'''''' Fetch: Origin header]]
( ([TIME[2013-07-23 21:15:30 +09:00]] 版))
<http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2013-July/040196.html>

[274] [CITE@en[Bug 20701 – Location security restrictions are over-restrictive]]
( ([TIME[2013-08-19 07:16:36 +09:00]] 版))
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=20701>

[276] [CITE@en[Web Applications 1.0 r8307     Fix the rules on what 'Origin' header to use when navigating to a resource in an <iframe>, <object>, <embed>, or <frame> element, so that the latter two are not forgotten.]]
( ([TIME[2013-11-23 03:48:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=8306&to=8307>

[277] [CITE@en[Bug 23005 – IDNA-related bits should instead reference terminology from http://url.spec.whatwg.org/]]
( ([TIME[2013-11-23 11:21:51 +09:00]] 版))
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=23005>

[278] [CITE@en[Web Applications 1.0 r8320 Clarify what it means for an image to have an origin]]
( ([TIME[2013-12-03 05:27:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=8319&to=8320>

[279] [CITE@ja[Using Self-Hosted Objects - Facebook開発者]]
( ([TIME[2013-12-11 02:55:56 +09:00]] 版))
<https://developers.facebook.com/docs/opengraph/using-objects/>

[280] [CITE[Flashと特定ブラウザの組み合わせでcross originでカスタムヘッダ付与が出来てしまう問題が未だに直っていない話]]
( ([TIME[2014-02-19 08:05:01 +09:00]] 版))
<https://gist.github.com/mala/8857629>

[281] [CITE@en[446344 – Implement Origin header CSRF mitigation]]
( ([TIME[2014-02-19 08:21:51 +09:00]] 版))
<https://bugzilla.mozilla.org/show_bug.cgi?id=446344>

[282] [CITE@en[Web Applications 1.0 r8262 Move the spec from a stack of incumbent scripts to a stack of script settings object. This should in theory have no concrete effects (though I may have changed some of the origin used for Web Workers started from document.domain-affected scripts that were called from other scripts with different original origins).]]
( ([TIME[2013-11-09 08:21:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=8261&to=8262>

[290] [CITE[IRC logs: freenode / #whatwg / 20140426]]
( ([TIME[2014-04-28 14:06:27 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20140426>

[291] [CITE@en[Bug 26152 – Would it not be better to define origin as identifier, tuple, or, alias? That alias is actually a link to another origin is not super clear this way.]]
( ([TIME[2014-06-26 01:45:08 +09:00]] 版))
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=26152>

[294] 2014年には [[URL]] の[[起源]]が [[URL Standard]] で定義されるようになり [SRC[>>307]]、
実質的に [[URL Standard]]、[[Fetch Standard]]、[[HTML Standard]]
によって [[RFC 6454]] は廃止されました [SRC[>>308, >>309, >>7]]。

[REFS[
- [307] [CITE[Define URL's origin · c65766a · whatwg/url]] ([TIME[2014-07-01 04:34:21 +09:00]] 版) <https://github.com/whatwg/url/commit/c65766a674c6f4c3c521b6dc843f07c1fd23b4d2>
- [308] [CITE[Fix origin xref mess; obsolete ORIGIN · d94f125 · whatwg/fetch]] ([TIME[2014-07-01 04:49:04 +09:00]] 版) <https://github.com/whatwg/fetch/commit/d94f125e97592c078e023d5490b65b4210ebe8dc>
- [309] [CITE@en[ORIGIN is no more · d354f76 · whatwg/dom]]
( ([TIME[2014-08-07 05:26:04 +09:00]] 版))
<https://github.com/whatwg/dom/commit/d354f769a18fd567c9c3d763116048ab6c2d383e>
- [1] [CITE@en[Opaque identifier is a type, not a value https://www.w3.org/Bugs/Public/... · 09d81f5 · whatwg/url]] ([TIME[2014-09-09 03:50:52 +09:00]] 版) <https://github.com/whatwg/url/commit/09d81f55e4a788980101fe7f88b1e3c6c8fe7435>
- [7] [CITE@en[Web Applications 1.0 r8787 Move the reference for URL origin from Web Origin to URL.]] ([TIME[2014-09-19 05:37:00 +09:00]] 版) <https://html5.org/r/8787>
]REFS]

[311] [CITE@en[draft-nir-websec-extended-origin-02 - A More Granular Web Origin Concept]]
( ([TIME[2014-10-17 05:58:23 +09:00]] 版))
<http://tools.ietf.org/html/draft-nir-websec-extended-origin-02>

[42] [CITE@en[origin on HTMLHyperlinkElementUtils/Location is readonly · whatwg/html@2c97ff8]]
([TIME[2015-11-24 12:20:18 +09:00]] 版)
<https://github.com/whatwg/html/commit/2c97ff8e46a86911f621ee4303d0fc18ddcb9b2b>

[45] [CITE@en[Add ids to origin's types · whatwg/html@b870180]]
([TIME[2016-02-05 14:43:51 +09:00]] 版)
<https://github.com/whatwg/html/commit/b8701806808e6fc393a92207717a8bce72a91d1d>

[46] [CITE@en[Remove the origin aliasing concept · whatwg/html@438155d]]
([TIME[2016-03-23 23:26:08 +09:00]] 版)
<https://github.com/whatwg/html/commit/438155d2a2255aa5ea84ae390744d8a8662ebec2>

[51] [CITE@en[Cleanup origin serialization · whatwg/html@5dcc1ee]]
([TIME[2016-03-24 17:14:01 +09:00]] 版)
<https://github.com/whatwg/html/commit/5dcc1ee2124b5e54955845790bb47f5d1351d672>

[77] [CITE@en[Merge effective script origin into origin · whatwg/html@8a843f2]]
([TIME[2016-03-31 15:35:25 +09:00]] 版)
<https://github.com/whatwg/html/commit/8a843f2169a6864a3024c4329528dccb2051d275>

[119] [CITE@en[''''''[''''''css-cascade'''''']'''''' Switch term to 'cascade origin'. Dfn the various origins. · w3c/csswg-drafts@9617cdd]]
([TIME[2016-04-14 11:55:19 +09:00]] 版)
<https://github.com/w3c/csswg-drafts/commit/9617cdd5e117b4674e89b799fa437441f7fd80e4>

[123] [CITE@en[Editorial: clarify origin invariants · whatwg/html@e337726]]
([TIME[2016-04-25 11:26:49 +09:00]] 版)
<https://github.com/whatwg/html/commit/e337726ec3e20c418fb062fd3650c5830acd2b22>

[125] [CITE@en[Clarify the "no serialisation" statement for opaque origins]]
( ([[annevk]]著, [TIME[2016-05-14 05:20:49 +09:00]]))
<https://github.com/whatwg/html/commit/8b69a96e95d2eea28ebf0134336bc75dccafc0ed>



[35] [[ARIB]] は次のように規定しています。


[FIG(quote)[
[FIGCAPTION[
[130] [CITE[ARIB TR-B39]]
([TIME[2016-07-25 17:01:00 +09:00]])
<http://www.arib.or.jp/english/html/overview/doc/4-TR-B39v1_0-1p4.pdf#page=254>
]FIGCAPTION]

> 10.1.2.1 基本オリジン
> localStorage API の動作において、受信機は HTML 文書のオリジンを以下と判断することを基
本とする。
>  放送伝送の HTML 文書
> arib2://aid_[app_id].oid_[org_id]
> ※ [app_id]は、AIT における application_id を 16 進数表現した文字列。[org_id]は、AIT
におけるorganization_idを16進数表現した文字列。いずれも先頭には"0x"を付加せず、
最小桁数で表現する。
>  通信伝送の HTML 文書
> HTML 文書の URI に基づくスキーム、ホスト、ポート。
> 10.1.2.2 オリジンの読み替え
> 不揮発性記憶領域のうち放送領域にアクセスするキーが指定された場合、実行中のデータコンテ
ンツが放送マネージドアプリケーションでかつ、アプリケーションバウンダリおよびパーミッショ
ンビットマップによって放送領域へのアクセスが許されていれば、受信機は HTML 文書のオリジ
ンを表 10-5 の通り判断するよう読み替える。アクセスが禁止されているコンテンツでは、
SecurityError 例外が発生し、メソッドの動作は行われない。つまり、放送マネージドアプリケー
ションが各放送領域にアクセスできるかどうかは、HTML 文書の URI に基づくスキーム、ホスト、
ポート、application_id、organization_id には影響されない。
> 一時記憶領域へのアクセスにおいては、HTML 文書のオリジンを ARIB STD-B62 第二編 3.3.5
に基づいて判断する。
> キー名を引数に取らないメソッド(localStorage.key(), localStorage.clear())とプロパティ
(localStorage.length)は、オリジン読み替えを行わない。つまり、その対象は基本オリジンの領
域のみとなる。これは、オリジン読み替えを行うか否かが、アクセスするアイテムのキー名によっ
て判断されるためである。
> document.domain 属性を書き換えた場合は、Web Storage 仕様の規定に基づき、それ以降の
localStrorage オブジェクトは無効化され、関連するメソッドは動作しなくなる。
> 表 10-5 読み替え先オリジン
> アクセス領域 読み替え先オリジン
> Ureg arib://localhost (※1)
> Greg arib://localhost (※1)
> 放送領域
> 放送事業者共通領域 arib2://bs_common
> 放送事業者専用領域 arib2://bid_[broadcaster_id].nid_[original_network_id]
> 視聴者居住情報領域 arib2://localhost
> 一般領域 読み替えしない
> ※1 ARIB STD-B62 第二編 3.3.5 に基づく。
> ※2 [broadcaster_id]は、選局中サービスの broadcaster_id を 16 進数表現した文字列。
> [original_network_id]は、選局中サービスの original_network_id を 16 進数表現した文字
列。いずれも先頭に”0x”を付加せず、英字は小文字とし、最小桁数で表現する。

]FIG]


[144] [CITE@en[Remove Unicode serialization of an origin]]
([[annevk]]著, [TIME[2017-05-18 13:24:49 +09:00]])
<https://github.com/whatwg/html/commit/59ebd9c094d9d532458a9ee61f307bf41bc70811>

[151] [CITE@en[ASCII serialization]]
([[mikewest]]著, [TIME[2017-05-24 19:39:55 +09:00]])
<https://github.com/w3c/webappsec-csp/commit/0b236a75ddd245d0512da28f2e11311622a07ddd>

[152] [CITE@en[Origins serialize to ASCII these days]]
([[annevk]]著, [TIME[2017-07-05 19:31:34 +09:00]])
<https://github.com/whatwg/dom/commit/fba2caf4be29c30e7e03010d5fce240a729e0bed>

[156] [CITE@en[Explicitly block opaque origins from requesting manifests (#638)]]
([[dominickng]]著, [TIME[2018-01-18 14:14:44 +09:00]])
<https://github.com/w3c/manifest/commit/c586cf0ba4923489fba995d72c638bc46b7ea33d>

[157] [CITE@en[Explicitly block opaque origins from requesting manifests by dominickng · Pull Request #638 · w3c/manifest]]
([TIME[2018-05-06 15:46:25 +09:00]])
<https://github.com/w3c/manifest/pull/638>

[161] [CITE@en[Suggest use of origin in public suffix warning]]
([[mozfreddyb]]著, [TIME[2019-02-11 22:22:25 +09:00]])
<https://github.com/whatwg/url/commit/0c6e51d2927dbfd2fcb6448795b3e1537b555728>

[162] [CITE@en[Use ASCII serialization for origins (#1151)]]
([[jungkees]]著, [TIME[2019-06-14 03:09:32 +09:00]])
<https://github.com/w3c/ServiceWorker/commit/a47c6d86c1436a4fff573d2a5da92b0e14891fa2>

[164] [CITE@en[Use ASCII serialization for origins by jungkees · Pull Request #1151 · w3c/ServiceWorker]]
([TIME[2020-01-12 20:28:31 +09:00]])
<https://github.com/w3c/ServiceWorker/pull/1151>

[165] [CITE@en[Use ASCII serialization for origins · Issue #1142 · w3c/ServiceWorker]]
([TIME[2020-01-12 20:29:09 +09:00]])
<https://github.com/w3c/ServiceWorker/issues/1142>

[169] [CITE@en[Add TAO check]]
([[npm1]], [TIME[2019-12-04 19:41:07 +09:00]], [TIME[2022-01-18T11:48:34.000Z]])
<https://github.com/whatwg/fetch/commit/9dd531988b04f4fadd43022a0613a90b42ce46d4>

[174] [CITE@en[The Origin API]], [TIME[2025-08-05T10:52:03.000Z]], [TIME[2025-08-06T01:30:31.043Z]] <https://mikewest.github.io/origin-api/>

[175] 
[CITE@en[GitHub - mikewest/origin-api: An `Origin` object might be nice to have.]], [TIME[2025-08-06T01:30:58.000Z]] <https://github.com/mikewest/origin-api>
