web-dev-qa-db-ja.com

クロスドメインリクエストの作成方法

ご存知のように、ウェブブラウザのセキュリティはクロスドメインリクエストの作成を許可していません。サーバーにファイルを配置できる場合にのみXMLHTTPRequestを使用する必要があると書かれている本を読みます(つまり、ロードするページを同じ要求ドメインに配置することを意味します)。できない場合-代替を検索する必要があります。

私の質問は

  1. XMLHTTPRequestに代わるクロスドメインとは何ですか?
  2. WebSocketsはどうですか?このテクノロジーはクロスドメインリクエストを許可しますか?

EDIT:まだはっきりしていません...

たとえば、www.domain1.comからページを取得し、www.domain2.comからjavascriptを要求する必要があります。したがって、プルされたページには次のようなものが含まれているはずです。

<script src="www.domain2.com/script.js"></script>

クロスドメイン制限を回避するため。

JSONPを使用すると、リクエストは次のようになります:http://ww.domain1.com/?callback=someFunction.js

しかし、それは同じではありませんか?別のドメインからjsを取得するだけです!クロスドメイン制限を回避しますか?

34
VB_

XMLHttpRequestオブジェクトを使用して、クロスドメインリクエストを作成できます。これは、「Cross Origin Resource Sharing」と呼ばれるものを使用して行われます。参照: http://en.wikipedia.org/wiki/Cross-Origin_resource_sharing

非常に簡単に言えば、サーバーにリクエストが行われると、サーバーはリクエストを許可または拒否するAccess-Control-Allow-Originヘッダーで応答できます。ブラウザはこのヘッダーを確認する必要があり、許可されている場合はリクエストプロセスを続行します。そうでない場合、ブラウザはリクエストをキャンセルします。

いくつかのより多くの情報と実際の例を見つけることができます: http://www.leggetter.co.uk/2010/03/12/making-cross-domain-javascript-requests-using-xmlhttprequest-or- xdomainrequest.html

JSONPは代替ソリューションですが、ちょっとしたハックであると主張することができます。

21
leggetter

クロスドメインAJAX呼び出しを行う

JSONPを実行するには、Webサービスがメソッドインジェクションをサポートする必要があります。

コードは問題ないようで、WebサービスとWebアプリケーションが同じドメインでホストされていれば機能するはずです。

DataType: 'jsonp'で$ .ajaxを実行すると、jQueryは実際にクエリURLに新しいパラメーターを追加します。

たとえば、URLがhttp://10.211.2.219:8080/SampleWebService/sample.doの場合、jQueryは?callback = {some_random_dynamically_generated_method}を追加します。

このメソッドは、実際にはウィンドウオブジェクトにアタッチされた、より一種のプロキシです。これは特定のものではありませんが、次のようになります。

window.some_random_dynamically_generated_method = function(actualJsonpData) {
    //here actually has reference to the success function mentioned with $.ajax
    //so it just calls the success method like this: 
    successCallback(actualJsonData);
}

詳細については、次を確認してください

jQueryでクロスドメインajax JSONPリクエストを作成

5
Arun Bertil

データを送信する意思があり、セキュリティで保護する必要がない場合(公開情報)、CORSプロキシを使用できます。非常に簡単で、コードやサーバー側で何も変更する必要はありません。 (特に、Yahoo APIやOpenWeatherのようなサーバーではありません)。 XMLHttpRequestでJSONファイルを取得するために使用しましたが、うまく機能しました。

4
Tarek Jellali