2

JSON-Pについて( JSON-P VS JSONおよびwikipediaから)学んだことは次のとおりです-JSON-Pは、ブラウザーの同一生成元ポリシーを克服し、別のドメインからJSONオブジェクトをロードするために発明されました。JSON-P呼び出しがどのように機能するかを示すstackoverflowに関する投稿があります。そこで、URLから削除する?callback=?と、JSON-PリクエストはプレーンなJSON呼び出しのように機能するため、同一生成元ポリシーによって拒否されたようです。これは、このライブの例で証明されています。

今私は別のURLを持っています:https://graph.facebook.com/100001612121705.json そして私はそこからデータをロードするために次の方法を使用します(ライブの例についてはここにアクセスしてください):

$(document).ready(function() {
    $.getJSON("https://graph.facebook.com/100001612121705", null,
    function(data) {
        $.each(data, function(key, val) { 
            alert(key + ' is ' + val);
        });
    });
});​

私は自分のURLでを使用していないことに注意してください。?callback?それでも、このリクエストは別のドメインからJSONデータをフェッチできます。これは私にとって非常に驚くべきことです。このリクエストが同一生成元ルールによって拒否されない理由を誰かが親切に説明できますか?

4

2 に答える 2

7

これは、HTTP応答に次のヘッダーが含まれているためです。

Access-Control-Allow-Origin: *

これ*は、任意のオリジンがXHR(Ajax)を介して特定のリソースを取得できることを意味します。

したがって、Webサーバーにリソースがあり、オリジンに関係なくXHRを介してリソースを利用できるようにする場合は、上記のヘッダーをHTTP応答に追加するだけです。

于 2012-06-30T14:51:26.360 に答える
3

Facebookのサーバーは次のヘッダーを出力します

Access-Control-Allow-Origin: *

このヘッダーは、呼び出しの最初のフェーズでブラウザーによって取得され、解析されます。これは、リファラー(元のページ)がそのURLからデータをロードできることを示しています。したがって、同一生成元ポリシーの制限をバイパスします。

ここの標準に関する情報:

クロスオリジンリソースシェアリング

于 2012-06-30T14:53:20.510 に答える