11

Flickr の REST API を使用していますが、問題なく動作しています。つまり、Flickr API に対して AJAX 呼び出しを行い、JSON オブジェクトを取得し、オブジェクトを解析するなどです。

しかし、これは私の心に疑問を投げかけます。ブラウザが同一生成元ポリシーに従っている場合、これらのタイプの API リクエストをどのように行うことができるでしょうか?

この DEMO フィドルは機能していますが、クロスドメイン リクエストを Flickr ドメインに送信します。

このクロスドメイン リクエストはどのように機能しますか?

クロスドメイン リクエスト:

$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?id=" +
          id + "&lang=en-us&format=json&jsoncallback=1");
4

1 に答える 1

12

理解しておく必要があるのは、ブラウザーは同一オリジン ポリシー (SOP) を強制しますが、SOP が強制されない場合には例外があるということです。たとえば、HTML ページがある場合<img>、任意のドメインの画像を指すタグを挿入できます。したがって、ここでは SOP は適用されず、画像に対してクロスオリジン HTTP GET リクエストを行っています。

リンクしたデモは、同様に機能するメカニズムを使用しているため機能します。このメカニズムは JSONP ( http://en.wikipedia.org/wiki/JSONP )と呼ばれます。Wiki エントリやその他のブログ投稿を読むことをお勧めします。基本的に、JSONP は動的に<script>タグを挿入して任意のドメインにリクエストを送信します (リクエストのパラメーターは URL クエリ パラメーターとして追加されます)。これは、同じオリジン ポリシーがタグに適用されないためです<script>(タグには適用されないため<img>)。

他のドメインで REST API を呼び出すもう 1 つの方法は、クロスオリジン リソース共有メカニズム (CORS) ( http://en.wikipedia.org/wiki/Cross-origin_resource_sharing ) を使用することです。本質的に、このメカニズムにより、ブラウザはクロスオリジン リクエストを拒否せず、ターゲット サービスに特定のクロスオリジン リクエストを許可するかどうかを尋ねることができます。ターゲット サービスは、応答に特別な HTTP ヘッダーを挿入することにより、クロスオリジン リクエストを許可することをブラウザに伝えます。

Access-Control-Allow-Origin: http://www.example.com 
于 2013-01-05T17:41:59.060 に答える