ある第三:あなたが見ていない可能性がありますオプションのクロスオリジンリソース共有(CORS)が。
CORS標準は、サーバーが許可されたオリジンドメインにリソースを提供できるようにする新しいHTTPヘッダーを追加することで機能します。ブラウザはこれらのヘッダーをサポートし、それらが確立する制限を尊重します。
例:サイトがhttp://my-cool-site.comであり、ドメインhttp://third-party-site.comにサードパーティAPIがあり、AJAX経由でアクセスできるとします。
そして、my-cool-site.comからサーバーが提供するページが、third-party-site.comにリクエストを出したと仮定します。通常、ユーザーのブラウザは、Same-Originセキュリティポリシーに従って、自分のドメイン/サブドメイン以外の他のサイトへのAJAX呼び出しを拒否します。ただし、ブラウザとサードパーティのサーバーがCORSをサポートしている場合、次のことが起こります。
ブラウザは、次のHTTPヘッダーをthird-party-site.comに送信します
Origin: http://my-cool-site.com
サードパーティのサーバーがドメインからのリクエストを受け入れると、次のHTTPヘッダーで応答します。
Access-Control-Allow-Origin: http://my-cool-site.com
すべてのドメインを許可するために、サードパーティのサーバーはこのヘッダーを送信できます:
Access-Control-Allow-Origin: *
サイトが許可されていない場合、ブラウザはエラーをスローします。
クライアントにCORSをサポートするかなり最新のブラウザーがあり、サードパーティのサーバーもCORSをサポートしている場合は、コードを少し変更するだけで確実にCORSを使用できます。
CORSについてのわかりやすい説明を見つけました。その説明には、別の方法であるJSONPもあります。ただし、JSONPではコードにかなりの量の変更が必要になります。
CORSリクエストを行うにはXMLHttpRequest
、Firefox 3.5以降、Safari 4以降、Chromeで使用しXDomainRequest
、IE8 以降ではオブジェクトを使用します。XMLHttpRequest
オブジェクトを使用しているときに、クロスドメインリクエストを実行しようとしていることがブラウザに認識されると、CORS動作がシームレスにトリガーされます。
次に、クロスブラウザーCORSオブジェクトの作成に役立つJavaScript関数を示します。
function createCORSRequest(method, url){
var xhr = new XMLHttpRequest();
if ("withCredentials" in xhr){
// XHR has 'withCredentials' property only if it supports CORS
xhr.open(method, url, true);
} else if (typeof XDomainRequest != "undefined"){ // if IE use XDR
xhr = new XDomainRequest();
xhr.open(method, url);
} else {
xhr = null;
}
return xhr;
}
「ほとんどのブラウザがクロスドメインXMLの使用を制限している」とのことですので、サードパーティのサーバーがCORSをサポートしていない可能性があります。次に、代替アプローチを見つける必要があります。