[46] 本稿では [[CORS]] 以前の古い提案にあった [CODE(XML)@en[[[<?access-control?>]]]]
[[処理指令]]、 [CODE(HTTP)@en[[[Access-Control:]]]] [[頭欄]]について説明しています。

[47] 最終的に [[Webブラウザー]]に実装された技術については [[CORS]]
の項をご覧ください。

* [CODE(XML)[access-control]] 処理指令 (XML)

[2] [[XML]] [[文書]]で [DFN[[CODE(XML)[access-control]] [[処理指令]]]]を使うと、
外部からその[[文書]]の内容を処理しようとするのを認めるかどうか指定できます。

[3] 例えば、 [SAMP[example.net]] の[[文書]] [VAR[A]] は[[スクリプト]]で
[SAMP[example.com]] の[[文書]] [VAR[B]] 
を読み込んで処理するように設計されているとします。しかし、
[[文書]] [VAR[A]] を読込む 
[[Webブラウザ]]は[[安全]]上の理由でこのような[[ドメイン]]を超えた操作を認めていないかもしれません。

そこで、 [CODE(XML)[access-control]] [[処理指令]]で
[SAMP[example.net]] を認めると[[文書]] [VAR[B]] に記述すると、
[WEAK[([[Webブラウザ]]が対応していれば)]]
[[文書]] [VAR[A]] の[[スクリプト]]は[[文書]] [VAR[B]]
を処理できます。

[[#comment]]


** 仕様書

[1]
[AC]
[CITE[Authorizing Read Access to XML Content Using the <?access-control?> Processing Instruction 1.0]] <http://www.w3.org/TR/2005/NOTE-access-control-20050613/>

[[VoiceXML 2.1]] の附属書から分離されましたよ。
一応完成で改訂の予定無しだそうです。

[[RFC 2732]] 参照してるよ[AA[orz]]
([[名無しさん]] [WEAK[2005-06-13 23:12:28 +00:00]])

[18]
[CITE[Authorizing Read Access to XML Content Using the <?access-control?> Processing Instruction 1.0]] <http://www.w3.org/TR/2006/WD-access-control-20060517/>
([[名無しさん]] [WEAK[2006-05-18 22:05:46 +00:00]])

[19]
[CITE[2006/waf/access-control/]] ([CODE[2007-02-02 22:10:19 +09:00]] 版) <http://dev.w3.org/cvsweb/2006/waf/access-control/>
([[名無しさん]] [WEAK[2007-02-02 13:20:28 +00:00]])

[20]
[CITE@en-US[Enabling Read Access for Web Resources]] ([CODE[2007-02-16 03:36:23 +09:00]] 版) <http://www.w3.org/TR/2007/WD-access-control-20070215/>
([[名無しさん]] [WEAK[2007-02-17 03:28:18 +00:00]])

[21]
[CITE@en-US[Enabling Read Access for Web Resources]] ([CODE[2007-06-18 22:59:12 +09:00]] 版) <http://www.w3.org/TR/2007/WD-access-control-20070618/>
([[名無しさん]] [WEAK[2007-06-21 04:59:43 +00:00]])

[22]
[CITE@en-US[Enabling Read Access for Web Resources]] ([CODE[2007-10-02 00:23:22 +09:00]] 版) <http://www.w3.org/TR/2007/WD-access-control-20071001/>
([[名無しさん]])

[23]
[CITE@en-US[Access Control for Cross-site Requests]] ([CODE[2007-11-26 22:31:03 +09:00]] 版) <http://www.w3.org/TR/2007/WD-access-control-20071126/>
([[名無しさん]])

[27]
[CITE@en-US[Access Control for Cross-site Requests]] ([CODE[2008-02-14 07:35:35 +09:00]] 版) <http://www.w3.org/TR/2008/WD-access-control-20080214/>
([[名無しさん]])

[28]
これ、しばらく見ないうちにどうなってしまったんだ・・・。内容が全然別物になってる件。

別に前のがよかったとはいわないけど、今のでよくなっているのか??
([[名無しさん]] [WEAK[2008-08-01 13:46:26 +00:00]])

[29]
[CITE@en-US[Access Control for Cross-Site Requests]] ([CODE[2008-09-09 23:54:06 +09:00]] 版) <http://www.w3.org/TR/2008/WD-access-control-20080912/>
([[名無しさん]])

[[#comment]]


** 構文

[3] [SRC[AC 2]]
:[CODE(infoprop)[[[対象]]]]:[CODE(XML)[access-control]]
:[CODE(infoprop)[[[内容]]]]:- [CODE(ABNF)[[DFN[content]] := [(allow / deny / allow [[S]] deny) '''['''[[S]]''']'''] [SPAN(comment)[;; [1] ]]]]
- [CODE(ABNF)[[DFN[allow]] := 'allow=' (<"> access-list <"> / "'" access-list "'") [SPAN(comment)[;; [1] ]]]]
- [CODE(ABNF)[[DFN[deny]] := 'deny=' (<"> access-list <"> / "'" access-list "'") [SPAN(comment)[;; [1] ]]]]
- [CODE(ABNF)[[DFN[access-list]] := access-item *([[S]] access-item) / "*" [SPAN(comment)[;; [2] ]]]]
- [CODE(ABNF)[[DFN[access-item]] := host-name / partial-host-name / [[IPv4address]] / [[IPv6address]] [SPAN(comment)[;; [3] ]]]]
- [CODE(ABNF)[[DFN[partial-host-name]] := "*." host-name [SPAN(comment)[;; [4] ]]]]

[CODE(ABNF)[host-name]] は仕様 [SRC[AC 2]]
によれば [[RFC 2732]] のものですが、
[[RFC 2732]] は [[RFC 2396]] を参照しています。
[CODE(ABNF)[[[IPv4address]]]] と [CODE(ABNF)[[[IPv6address]]]]
も仕様 [SRC[AC 2]] によれば [[RFC 2732]] のものですが、
[[RFC 2373]] が参照されています。

[4]
[CODE(XML)[access-control]] [[処理指令]]を記述する場所については特に規定がありません。
[[文書]]中のどこでもよいということでしょうか。

[5]
[CODE(XML)[access-control]] [[処理指令]]は1つの[[文書]]中に何個でも記述できます
[SRC[AC 2]]。

[[#comment]]


** 一致の判定

[6] [SRC[AC 2]]
- [CODE(XML)[access-control]] [[処理指令]]がある場合、
-- 複数 [CODE(XML)[access-control]] [[処理指令]]があれば、
結合して考えます。
== [[IP番地]]が [CODE(XML)[deny]] [[属性]]の値に一致すれば、
[[アクセス]]は拒否し、検索は終了します。
== [[IP番地]]が [CODE(XML)[allow]] [[属性]]の値に一致すれば、
[[アクセス]]を認め、検索は終了します。
== [[完全修飾ドメイン名]]が [CODE(XML)[deny]] 
[[属性]]の値に正確に一致すれば、[[アクセス]]は拒否し、検索は終了します。
== [[完全修飾ドメイン名]]が [CODE(XML)[allow]] 
[[属性]]の値に正確に一致すれば、[[アクセス]]を認め、検索は終了します。
== [[ドメイン名]]の[[ワイルドカード]]を使った最良一致を探します。
--- [DFN[最良一致]]とは、[[ワイルドカード]]を使った一番近い一致です。
例えば、 [SAMP[bert.evil.example.com]] は [SAMP[*.example.com]]
よりも [SAMP[*.evil.example.com]] に近いとします。
--- 最良一致が [CODE(XML)[deny]] [[属性]]で見つかれば、
[[アクセス]]は拒否し、検索は終了します。
--- 最良一致が [CODE(XML)[allow]] [[属性]]で見つかれば、
[[アクセス]]を認め、検索は終了します。
== [[アクセス]]は拒否し、検索を終了します。
- [CODE(XML)[access-control]] [[処理指令]]が無い場合、
[[利用者エージェント]]の判断によります。

[8] >>5 の[[算法]]では、 [CODE(XML)[access-control]]
[[処理指令]]が含まれる[[文書]]自体が置かれている場所が関与していないことに注意して下さい。
[SAMP[a.example.net]] に置かれている文書で [CODE(XML)[access-control]]
する時で、 [SAMP[a.example.net]] の他の文書からの[[アクセス]]を認めたいなら、
[SAMP[a.example.net]] が認められるような指定も明記しなければなりません。

[[#comment]]


** 安全性

[12] [[利用者エージェント]]は安全への配慮から普通他のドメインにある[[文書]]を直接扱えないようにしています。
[CODE(XML)[access-control]] [[処理指令]]は便利さのためにこの制限を緩和しますが、
当然その分安全性は低くなります。

[13] [[利用者エージェント]]の安全の制限はドメイン名等によって[[利用者]]が制御できるようにされていることが少なくありませんが、
>>6 の算法をそのまま適用すると、 [CODE(XML)[access-control]]
[[処理指令]]が存在する場合に[[利用者]]の意思を反映させられなくなります。
[[CSS]] の [CODE(CSS)[![[import]]]] のように
[CODE(XML)[access-control]] よりも強い制御を[[利用者]]が指定できた方が便利かもしれません。

[14] 
異なるドメインの文書の処理の制限は、 [WEAK[([[利用者]]にとっての)]]
[[第三者]]に意図しないうちに情報が送られてしまうことを防ぐ意味もあります。
例えば [SAMP[example.net]] の[[文書]] [VAR[A]]
から [SAMP[example.com]] の[[文書]] [VAR[B]] を
[WEAK[([SAMP[example.com]] [[鯖]]側で処理される)]] [[引数]] [VAR[q]]
をつけて呼び出すように記述されているとしますと、
[[利用者]]は気づかないうちに[[引数]] [VAR[q]] 
という情報を第三者に渡してしまうのです。

外部のドメインたる [SAMP[example.com]] 
の[[文書]] [VAR[B]] の取得の試み自体を安全制限違反で弾いてしまうのであれば、
[[引数]] [VAR[q]] が渡されることはありません。しかし
[CODE(XML)[access-control]] [[処理指令]]を読むためには[[文書]]
[VAR[B]] を読まなければなりませんから、その時点で[[引数]] [VAR[q]]
が渡されてしまうのです。

[[#comment]]


** 例

[7] [[FQDN]] を2つ指定した例 [SRC[AC 2 改]]
[PRE(XML example code)[
<?access-control allow="voice.roadrunner.example voice.acme.example"?>
]PRE]

この例の場合、 [SAMP[voice.roadrunner.example]] や
[SAMP[voice.acme.example]] は認められますが、
それ以外はすべて認められません。

[9] ワイルドカードを使った例 [SRC[AC 2]]
[PRE(XML example code)[
<?access-control allow="*.roadrunner.example *.acme.example"?>
]PRE]

[SAMP[voice.roadrunner.example]] や
[SAMP[voice.acme.example]] はこの例でもやはり認められますが、
それだけではなく、 [SAMP[image.roadrunner.example]] や
[SAMP[www.acme.example]] も認められます。
しかし [SAMP[acme.example]] は認められません。

[10] すべて認める例 [SRC[AC 2]]
[PRE(XML example code)[
<?access-control allow="*"?>
]PRE]

あらゆるホストが認められます。

[11] 一部だけ認めない例 [SRC[AC 2]]
[PRE(XML example code)[
<?access-control allow="*.example.com" deny="*.visitors.example.com"?>
]PRE]

[SAMP[www.example.com]] は認められますが、
[SAMP[www.visitors.example.com]] は認められません。

なお、構文 >>3 により [CODE(XML)[deny]] [[属性]]は
[CODE(XML)[allow]] [[属性]]の後に書かなければなりません。
算法 >>6 により、 [CODE(XML)[deny]] [[属性]]が
[CODE(XML)[allow]] 属性より優先されます。

[[#comment]]


** メモ

[15]
[CITE[RE: Comments on "Authorizing Read Access to XML Content Using the <?access-control?> Processing Instruction 1.0" from Ian Hickson on 2005-12-06 (public-appformats@w3.org from December 2005)]] <http://lists.w3.org/Archives/Public/public-appformats/2005Dec/0002.html>

[[Ian Hickson]] による問題点の指摘。
([[名無しさん]] [WEAK[2005-12-24 03:24:17 +00:00]])

[16]
元々開発していた [[Voice Browser WG]] は、
out of scope なので[[勧告]]まで進めないと決めました。
しかし、 [[Ajax]] などでも有用なので、引き取り先の [[WG]]
を探していました。 Web 応用系2[[WG]] のどちらかがよいのですが、
どちらも (例によって) 作業が遅れまくりなので、
やりたいけど大変だ〜なんて話してましたw どうなるのでしょうw

([[名無しさん]] [WEAK[2005-12-24 03:30:10 +00:00]])

[24]
[CITE@en-US[Access Control for Cross-site Requests]] ([CODE[2008-01-16 15:39:42 +09:00]] 版) <http://dev.w3.org/cvsweb/~checkout~/2006/waf/access-control/Overview-Declarative.html?content-type=text/html;%20charset=iso-8859-1>
([[名無しさん]])

[25]
[CITE@en-US[Access Control for Cross-site Requests: Proposed Restructuring]] ([CODE[2008-01-17 04:52:01 +09:00]] 版) <http://dev.w3.org/cvsweb/~checkout~/2006/waf/access-control/Overview-Declarative-20080116.html?content-type=text/html;%20charset=iso-8859-1>
([[名無しさん]])

[26]
[CITE@EN['''['''Editorial Draft''']''' Access Control for Cross-site Requests Requirements]] ([CODE[2008-01-16 08:08:53 +09:00]] 版) <http://dev.w3.org/cvsweb/~checkout~/2006/waf/access-control/AccessControl-Requirements?content-type=text/html>
([[名無しさん]])


[30]
[CITE@en['''['''access-control''']''' Update]] ([[Anne van Kesteren]] 著, [TIME[2008-07-09 04:31:40 +09:00]] 版) <http://lists.w3.org/Archives/Public/public-webapps/2008JulSep/0033.html>
([[名無しさん]])


[[#comment]]


* メモ

[17]
[CITE[XML:DB Initiative: Projects]] <http://xmldb-org.sourceforge.net/projects.html>

[31] [CITE@en[IEBlog : Completing Access Control support for XDomainRequest]] ([TIME[2009-01-20 21:24:10 +09:00]] 版) <http://blogs.msdn.com/ie/archive/2009/01/14/completing-access-control-support-for-xdomainrequest.aspx>

[32] [CITE[IRC logs: freenode / #whatwg / 20090210]] ([TIME[2009-02-12 07:13:29 +09:00]] 版) <http://krijnhoetmer.nl/irc-logs/whatwg/20090210#l-210>

>
- [10:44] <annevk5> CORS is done, apart from non-normative details and server requirements and potential feedback from implementors
- [10:44] <Hixie> cool
- [10:45] <hsivonen> annevk5: so CORS will use Origin regardless of how the more general ID goes?
- [10:45] <annevk5> hsivonen, there are three known implementations of CORS that use Origin and will ship soonish
- [10:45] <annevk5> hsivonen, of which one at least has indicated it cannot be possibly changed
- [10:45] <hsivonen> annevk5: ok.
- [10:45] <annevk5> hsivonen, not counting Chrome here
- [10:46] <annevk5> hsivonen, so I guess that although I appreciate the discussion on the HTTP WG mailing list, it's pretty much a done deal
- [10:48] <Hixie> someone should tell the http group
- [10:48] <Hixie> (not it!)
- [10:48] <annevk5> "not it!"?
- [10:49] <annevk5> I'm not sure they care much for reality, but I suppose I can give it try if the discussion surfaces again
- [10:51] <Hixie> "not it" is an idiomatic english expression meaning "i decline to volunteer for the responsibility that has most recently been put on the table"
- [10:51] <annevk5> heh 

[33] [CITE@en-US[Cross-Origin Resource Sharing]] ([TIME[2009-03-17 23:52:29 +09:00]] 版) <http://www.w3.org/TR/2009/WD-cors-20090317/>

[34] [CITE[IRC logs: freenode / #whatwg / 20091208]]
([TIME[2010-01-04 05:56:44 +09:00]] 版)
<http://krijnhoetmer.nl/irc-logs/whatwg/20091208>

[35] [CITE[IRC logs: freenode / #whatwg / 20091222]]
([TIME[2010-01-05 22:53:47 +09:00]] 版)
<http://krijnhoetmer.nl/irc-logs/whatwg/20091222>

[36] [CITE[IRC logs: freenode / #whatwg / 20100409]]
([TIME[2010-04-22 01:12:18 +09:00]] 版)
<http://krijnhoetmer.nl/irc-logs/whatwg/20100409#l-374>

[37] [CITE[IRC logs: freenode / #whatwg / 20100419]]
([TIME[2010-05-04 11:15:57 +09:00]] 版)
<http://krijnhoetmer.nl/irc-logs/whatwg/20100419>

[38] [CITE[IRC logs: freenode / #whatwg / 20100426]]
([TIME[2010-05-14 07:58:24 +09:00]] 版)
<http://krijnhoetmer.nl/irc-logs/whatwg/20100426>

[39] [CITE@en[About using CORS (was: Re: WebFonts WG Kick-off)]]
([[Anne van Kesteren]] 著, [TIME[2010-04-26 16:16:25 +09:00]] 版)
<http://lists.w3.org/Archives/Public/public-webfonts-wg/2010Apr/0040.html>

[40] [CITE[IRC logs: freenode / #whatwg / 20100513]]
([TIME[2010-06-07 08:30:12 +09:00]] 版)
<http://krijnhoetmer.nl/irc-logs/whatwg/20100513>

[41] [CITE@en['''['''cors''']''' Simplify CORS Headers (ISSUE-89)]]
([[Anne van Kesteren]] 著, [TIME[2010-05-07 09:30:10 +09:00]] 版)
<http://lists.w3.org/Archives/Public/public-webapps/2010AprJun/0508.html>

[42] [CITE[IRC logs: freenode / #whatwg / 20100702]]
([TIME[2010-07-18 00:28:05 +09:00]] 版)
<http://krijnhoetmer.nl/irc-logs/whatwg/20100702>

[43] [CITE@en-US[Cross-Origin Resource Sharing]]
([TIME[2010-07-27 23:13:45 +09:00]] 版)
<http://www.w3.org/TR/2010/WD-cors-20100727/>

[44] [CITE[IRC logs: freenode / #whatwg / 20100803]]
([TIME[2010-08-11 00:19:06 +09:00]] 版)
<http://krijnhoetmer.nl/irc-logs/whatwg/20100803#l-508>

[45] [CITE@en[cross origin resource sharing (cors) on iphone (xmlhttprequest) - WebDeveloper.com]]
( ([TIME[2010-09-23 13:07:39 +09:00]] 版))
<http://www.webdeveloper.com/forum/showthread.php?t=230494>

[48] <https://github.com/whatwg/fetch/commit/05a8acd40d6f65c1a6dc830896cd8366a99d267d>

[50] [[IANA登録簿]]には [[WebApps WG]] を出典に [[Provisional]]、状態「[[非推奨]]」
で [CODE(HTTP)@en[[[Access-Control:]]]] [[HTTPヘッダー]]が登録されています [SRC[>>49]]。

[REFS[
- [49] ([TIME[2011-07-16 05:29:36 +09:00]] 版) <http://www.iana.org/assignments/message-headers/prov/access-control>
]REFS]