5

(非推奨の)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リクエストが機能する理由を知っていますか?

4

1 に答える 1

6

Webサーバーでクロスオリジンリソースシェアリングが許可されていない場合は、HTTP応答ヘッダーAccess-Control-Allow-Originを手動で追加する必要があります。*

問題はリクエストヘッダーにあると思いました。HTTP応答ヘッダーを変更するFirefoxアドオンはありませんでした。ModifyHeadersまたはTamperDataでサポートされているのは要求ヘッダーのみです。Firefox でのHTTP応答ヘッダーの変更

私の質問は実際にはこれに似ていました:開発用のブラウザでSOP(同一生成元ポリシー)を無効にできますか?

解決策:誰かがCORSを強制するFirefoxアドオンを開発しました:https ://addons.mozilla.org/en-US/firefox/addon/forcecors/ 。または、GreaseMonkeyスクリプトでGM_xmlhttpRequestを使用することもできます。これは、XMLHttpRequestの同一生成元ポリシーをバイパスします。オープンソースであり、要求ヘッダーと応答ヘッダーの両方を編集できるヘッダーエディターと呼ばれる新しいアドオンもあります:https ://addons.mozilla.org/en-US/firefox/addon/header-editor/ 。

Chromeでは、ブラウザがAPIを提供しないため、HTTPリクエスト/レスポンスヘッダーを必要に応じて変更するアドオンはありませんが、SOPを無効にするフラグがあります(--disable-web-security)

于 2013-02-05T21:37:16.230 に答える