クロスドメインの問題を解決するためのフロントエンド
同一生成元ポリシー
元ポリシーは、ドキュメントのプロパティを取得したり、別のドメイン上で動作させるために1つのドメインからロードされたスクリプトを防ぐことができます。言い換えれば、URLのドメインがして、現在の要求と一致する必要があります
同じドメインのWebページ。これは、ブラウザがそれらの間の動作を防止するために、異なるソースからコンテンツを分離することを意味します。この戦略はから、非常に古いブラウザです
Netscape Navigatorのバージョン2.0が起動します
JSONPとは何ですか?
JSONP(JSONパディングとは)ジャバスクリプトを通じて、クライアント側の統合スクリプトタグに返されたサーバーを許可する非公式の合意であります
クロスドメインアクセスの形でコールバック(これは単純な実現JSONP形式です)
JSONPの使用は何ですか?
同一生成元ポリシー制限するので、XMLHttpRequestが唯一、クロスドメインリクエストを達成するために、現在のリソース源(ドメイン名、プロトコル、ポート)を要求するためにあなたがすることができます許可します
クロスドメインリクエストのスクリプトタグ、その後、クロスドメインのデータ要求を解決するために、サーバーおよびJSONコールバック関数にデータを出力
JSONPの使い方?
クライアントコールバック関数の後のステートメントでは、クライアントは、クロスドメインスクリプトタグを介してサーバにデータを要求し、サーバーは、適切なデータと動的な実行を戻ります
伝達関数
JSONPの原則:
まず、クライアントはサーバーにコールバックし、コールバックの名前を登録します。
この時点で、サーバーへの氏のJSONデータ。
次に、関数を生成するJavaScript構文的には、パラメータの関数名は、JSONPを渡されます。
直接参照モードに最後にJSONデータは、関数は、このようにクライアントに、JSドキュメント文法を生成し、配置されています。
クライアントのブラウザはスクリプトタグ、文書を解析し、あらかじめ定義され、クライアントに渡されたパラメータとしてのjavascriptのリターン、ケース内のデータを実行します
(動的なコールバック関数)にコールバック関数
ます。<script type = "text / javascriptの" SRC = "jquery.js"> </ SCRIPT>
ます。<script type = "text / javascriptの">
$アヤックス({
URL: "http://www.qcweb1.com/services .PHP」、
データ型: 'JSONP' 、
データ'' 、 JSONP: 'コールバック' 、 成功:関数(結果){(中VAR iに対する結果){アラート(iは+ ":" +もたらす[I]); / /循环输出:1、B:2、など。 }}、タイムアウト:3000 })。</ SCRIPT>
<?PHP (// JSONデータは、サーバの$ ARR =配列''から返さ => 2、 'C' => 3、 'D' => 4、 'E' => 5 1、 'B' =)> ; $のjson_encode結果=($のARR); // $ _GETエコー[ 'コールバック'] '( "こんにちは、世界!")' ;. //エコー$ _GET [ 'コールバック'] "($結果)。"; //動的実行コールバック $コールバック= $ _ GET [ 'コールバック']; 。エコー$コールバック"(結果$)"; ?>
<スクリプト>
関数kuayu(結果){
にconsole.log(結果)。
}
</ SCRIPT>
<スクリプトSRC = "http://web2.com/server.php?callback=kuayu"> </ SCRIPT>
以下
1、アヤックスJSONPとこの2つの技術がオブジェクトのように「見える」で呼ばれている、あまりにも、リクエストURLは、サーバはにデータを返します。
ライン処理、したがってフレームなどのjQuery EXT JSONPを封入AJAXの形態とみなされます。
2、しかし、AJAXとJSONP実際に何か異なる性質。コアはJSONPを移動している間、AJAXは、XmlHttpRequestのことで、このページ上の非中核コンテンツを取得することです
状態は、JSスクリプトサーバを呼び出すための<script>タグを追加しました。
3、実際には、AJAXプロキシサーバは、クロスドメインを介して達成することができるように、AJAXとJSONPの差は、クロスドメインかどうかではなく、それ自体をJSONPように、同じドメインを排除するものではありません
取得したデータ。
4、そこにある、JSONPは一つの方法またはオプションのプロトコルである、AJAXなど、のような、それは必ずしもあなたの場合は、データを転送するためにJSON形式を使用する必要はありません。
喜んで、文字列が行いますが、これは、公共サービスを提供するJSONPで助長されていません。
すべてのすべてではなく、特殊なケースのJSONPアヤックス、JSONPパッケージアヤックスにも、jQueryと他の巨人、それを変更しないで!
クロスドメインの問題を解決するためのバックエンド
設定することによりアクセス制御-許可-起源をクロスドメインに
1、単一のドメインへのアクセスを許可します
ドメイン名(http://web1.com)のクロスドメインアクセスを指定して、あなたは、単にファイルヘッダhttp://server.web.com/server.phpに次のコードを追加することができます。
ヘッダ(「アクセス制御-許可-起源:HTTP://web1.com」)。
2、複数のドメイン名を許可します
(://web1.com,http://web2.comなどHTTP)のクロスドメインアクセス、あなたは、単にファイルヘッダhttp://server.web.com/server.phpに次のコードを追加することができ、複数のドメイン名を指定します。
$起源= ISSET ($ _SERVER [ 'HTTP_ORIGIN' ])?$ _SERVER [ 'HTTP_ORIGIN' ] : '' ; $ allow_origin = 配列('http://client1.web1.com' 、'http://client2.web2.com' ); 場合(in_array ($起源、$のallow_origin )){ ヘッダ('アクセス制御は、許可-起源:' 。$由来); }
3、すべてのドメイン名を許可します
すべてのドメイン名は、単に次のコードhttp://server.web.com/server.phpファイルのヘッダを追加する許可:
ヘッダ(「アクセス制御-許可起源:*」);