[JavaScript] XmlHttpRequest Level 2
クロスドメインで非同期通信(Ajax)が可能に。
クライアントサイド
現在、すでにほとんどのブラウザが対応している。
しかし、IEは8以下だけでなく9でも対応しておらず、独自のXDomainRequestを使わなければならない。
これには、jQueryでさえ今のところ非対応。対応させるには、下記のプラグインなどを導入する必要がある。
- jQuery-ajaxTransport-XDomainRequest (MIT)
- xdr.js (MIT or GPL)
- jQuery CORS Plugin
サーバサイド
レスポンスのヘッダに「Access-Control-Allow-Origin」の記述が必要。
【全ドメインからのリクエストを許可】
[text]
Access-Control-Allow-Origin : *
[/text]
【特定のドメインからのリクエストを許可】
この場合、ひとつのURLしか指定できない。
[text]
Access-Control-Allow-Origin : htttp://site.oukasei.com
[/text]
PHPの場合
[php]
header('Access-Control-Allow-Origin : *’);
[/php]
Apacheの場合(httpd.confや.htaccessで)
[text]
Header Append Access-Control-Allow-Origin : *
[/text]
参考
[text]
Order allow,deny
Allow from all
Header set Access-Control-Allow-Origin “*"
[/text]
cookieを送りたい場合
クライアントサイド
XMLHttpRequest#withCredentialsをtrueにする。
[javascript]
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
[/javascript]
サーバサイド
レスポンスのヘッダに「Access-Control-Allow-Credentials」の記述が必要。
(credentialは「証明書」という意味)
[text]
Access-Control-Allow-Credentials : true
[/text]
JSONPのほうがよほど手軽なのだが、その仕様上、POSTが使えない