サーバーがある場合:
www.server1.com
次の場所からスクリプトをロードします。
www.server2.com/script-to-load.js
script-to-load.jsはwww.server2.comにajax呼び出しを行うことができますか?
ありがとう。
サーバーがある場合:
www.server1.com
次の場所からスクリプトをロードします。
www.server2.com/script-to-load.js
script-to-load.jsはwww.server2.comにajax呼び出しを行うことができますか?
ありがとう。
いいえ。
Javascriptには、コードの一部がどこから来たのかという概念がありません。
同一生成元ポリシーは、スクリプトを実行しているドキュメントに基づいてのみ適用されます。
はい。これを行うには3つの方法があります。
CORS:この方法を使用すると、ヘッダーがwww.server2.comに追加され、www.server1.comからのアクセスが可能になります。これは、JavaScriptでクロスドメインスクリプティングを行うための「正しい」方法です。参照:http ://www.w3.org/TR/cors/
サーバー側の「プロキシ」を使用する:このメソッドを使用すると、www.server1.comのサーバー側スクリプトがwww.server2.comのファイルにアクセスし、応答を返します。これは、管理しているサーバー上のWebサイトから、管理していないサーバー上のデータにアクセスするための実用的な方法です。スクリプトの例を以下に示します。
JSONP:このメソッドは、script
タグがクロスドメイン制限から免除されているという事実を利用します。参照: http: //en.wikipedia.org/wiki/JSONP
クロスドメインスクリプティング用のPHP「プロキシ」スクリプトの例:
オプション2を実行するPHPスクリプトの例は次のとおりです。
<?php
ini_set("user_agent", $_SERVER['HTTP_USER_AGENT']); // temporarily override CURLs user agent with the user's own
echo file_get_contents($_REQUEST["www"]);
?>
このスクリプトをwww.server1.com/proxy.phpに配置し、http://www.server1.com/proxy.php?www = http://www.server2.com/ajax.jsを呼び出します。スクリプトはwww.server2.com/ajax.jsのコンテンツを返すため、クロスドメインの制限を回避できます。
これがサーバー側のJSである場合(サーバーがスクリプトをロードしていると言った場合)、サーバー側のJSには同一生成元の制限はありません。同一生成元制限はブラウザーによって実装され、ブラウザーで実行されるスクリプトが実行できることに影響します。
さらに、ブラウザでは、スクリプトがどこから来たかは関係ありません。ブラウザはWebページの起点を確認し、ajax呼び出し(ページ内の任意のスクリプトによって行われる)をWebページのドメインに制限します。スクリプトはどこからでも取得でき、その出所は、ページ自体の出所に関するブラウザベースの同一生成元の制限には影響しません。
これは、ブラウザベースの同一生成元制限に関する優れたリファレンスです。