2012-03-11 9 views
18

CORS/IEではjQuery ajaxが機能しないため、別のサーバーからデータを取得するのにXDomainRequestを使用しています。仕事は大丈夫ですが、ヘッダー( '認証'、 'コンテンツタイプ')を送信したいと思います。IE8/IE9のクロスオリジンヘッダー

XDomainRequestにヘッダを追加/変更する機会はありますか?

誰かが回避策を知っていますか?

答えて

17

これは私たちがIEで行ったことです。

ターゲットドメインを制御できる場合は、そこに(静的な)htmlファイルをホストします。 iframeを使用してhtmlをインクルードします。

このiframeは実際にローカルドメインにアクセスできるため、必要な情報を得るために親と子のフレーム間で通信できます。

多くの場合、がXDomainRequestより優れています。

window.postMessageは、通信セットアップするための最良の方法です:

しかし、私は唯一のIE8以降仕事を始めたことをかなり確信しています。古いブラウザが必要な場合は、別のハッキングを使用する必要があります。

  1. CORS、
  2. プライマリ代替
  3. サーバ側プロキシとしてIFRAME &のwindow.postMessageそれをサポートするブラウザ用:我々の場合

    、これは私たちの3層系でしたスクリプトをセカンダリフォールバックとして使用

これらのオプションはすべてうまく動作し、信頼性が高く、ハッキングのように感じられませんでした。二次的なフォールバックはほとんど使用されていませんでした。

「認証」ヘッダーは特別ですが、とにかく特定の状況下ではブロックされていることに私はショックを受けません。私たちはカスタムヘッダー 'X-Authenticate'を追加しました。

+0

私は最後のiframe回避策を見ました。しかし、あなたは 'document.domain'を設定しなければならないので、同じTLDの2つのサブドメイン間の通信のためだけに機能すると思われます。しかし、2つの異なるTLDはどうですか? (私は、週末にプロキシサーバーの詳細を調べる必要があるかもしれません...) –

+0

iframeソリューション*はiframeがAPIと同じドメインでホストされている場合には動作するはずです*。プロキシスクリプトがあなたのための解決策であれば、それはあなたの目的のためにはるかに簡単かもしれません。それは単なるサーバー側のプロキシスクリプトなので、(通常)プロキシサーバーではないことに注意してください。 – Evert

+0

ok、私はiframeの作業を行いました。すべての情報(ヘッダー、ポストボディ、...)を含むオブジェクトをフレームウィンドウに渡します。フレームウィンドウは要求を実行し、応答を返します。 :)プロキシ・スクリプトについて:私がAPIサーバー上でスクリプトをホストしていれば、Ajaxのヘッダーでリクエストを送信する必要があります。したがって、スクリプトは「request」ページと同じサーバー上にありますか? (= ^クライアント)?この方法でIEは私にヘッダーやボディなどを送ることができます。プロキシは要求をapi-server(curl)に送信しますか? –

2

IEのXDomainRequestではカスタムヘッダーを設定できません。ここで項目#3を参照してください:http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx XDomainRequestオブジェクトは、認証された要求を作成するのが難しいところまでロックされています。

+1

しかし、回避策が必要です。それともIEが私が思ったよりも悪いですか? –

+1

カスタムヘッダーやCookieを設定する機能がなければ、認証されたリクエストを作成する良い方法は不明です。認証パラメータをクエリパラメータとして渡すこともできますが(これはOAuth2ユーザエージェントフローで可能です)、これは安全ではない可能性があります(SSL経由で行う必要があります)。申し訳ありませんが、他の誰かがより良い答えを持っている可能性があります:-) – monsur

+0

他のドメインのサイトにログインする必要があると思いました。 (したがって、適切なセッションクッキーと認証ヘッダーを設定します)。あなたのXDomainRequestは彼らが確立したセッションを使用しますか?私は間違っているかもしれません。 –

関連する問題