(非推奨の)TwitterAPI1.0でいくつかのテストを行っています
たとえば、クロスオリジンWebページからのAJAXブラウザー要求を使用して、クライアント側のAPIからデータを取得したいとします。新しい空白のタブ、ローカルのHTMLページ、または既存のWebサイトにすることができます。
JSONPを試しましたが、うまく機能しますが、TwitterサーバーがCORS http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharingをサポートしていない場合でも、デフォルトのXMLHttpRequestを使用したいと思います。
たとえば、google.comホームページでは、Firebugで実行するTwitterAPIへの単純なAJAX呼び出しを作成します。
var xhr = new XMLHttpRequest();
xhr.open("GET", "https://api.twitter.com/1/friends/ids.json?screen_name=baptx", false);
xhr.send();
同一生成元ポリシーが原因で、これは機能せず、Firebugでエラーが出力されます。
Error: Failure
xhr.send();
HTTP 200 OKコードを返しますが、サーバーからJSONデータを受信していません。
google.comWebページからのリクエストとapi.twitterWebページ(同じオリジンのAPIドメイン名であるためTwitter APIリクエストで機能します)の間に2つの違いがあります。
OriginHTTPヘッダーが現在のドメイン名で追加されました。
Origin https://www.google.com
リファラーHTTPヘッダーは 、api.twitter.comページからのリクエストのようにhttps://api.twitter.com/ではありませんが、私の場合は次のようになります。
Referer https://www.google.com/webhp?hl=en
そのため、Origin HTTPヘッダーを削除し、現在のRefererHTTPヘッダーをhttps://api.twitter.com/に変更しようとしました。
FirefoxのModifyHeaders拡張機能を使用してこれを実行しましたが、機能します。Firebugの[ネット]タブで、これらの変更が正しく行われたことを確認できます。
これで、google.comWebページとapi.twitter.comWebページからのリクエストからの同じリクエストヘッダーができました。HTTPヘッダーが上書きされた場合でも、API以外のドメインからのAJAXリクエストを実行できません。なぜですか?
ちなみに、Firefoxの「NewTab」からTwitterAPIへのAJAXリクエストが機能する理由を知っていますか?