私が 2 つのドメインを管理しているwww.api_domain.com
としwww.website_domain.com
ます。www.api_domain.com
ユーザーに認証を要求し、セッション Cookie を使用してリクエストを行っているユーザーを認識する API を提供します。www.website_domain.com
からそのページにスクリプトをロードし、そのスクリプトは、現在のユーザーの Cookie を使用して API URL を呼び出し、その結果を からのページで何らかの方法で使用しwww.api_domain.com
たいと考えています。www.api_domain.com
www.website_domain.com
スクリプトを最初にロードする場合、またはユーザーのセッション Cookie を必要としない API URL の場合、最も簡単な解決策は単純に
Access-Control-Allow-Origin: http://www.website_domain.com
からの応答のヘッダーwww.api_domain.com
。これは、IE 以外のすべてのブラウザーでそのまま使用できるようです。また、IE は、jQuery の AJAX メソッドを使用して作成された AJAX 要求の Allow-Origin ヘッダーを尊重しませんが、xdr.js のようなライブラリが舞台裏で何らかの魔法をかけて、 jQuery、IE、および Allow-Origin ヘッダーがうまく連携し、他のすべてのブラウザーと同じように動作するようにします (xdr.js の詳細はわかりませんが、私が見る限り、認証されていない要求に対しては完全に機能します) )。
http://www.api_domain.com
問題は、ユーザーのセッション Cookie を必要とする URL にアクセスしたいときに発生します。この問題がブラウザーに依存しない設定で議論される場合、通常、2 つの解決策が提案されます。
- からの応答で使用
Access-Control-Allow-Credentials: true
して、クロスドメイン要求でも Cookie が送信されるようにします。 http://www.website_domain.com
origin を使用してページに iframe を作成し、2 つのウィンドウがHTML5 ポスト メッセージhttp://www.api_domain.com
を使用して相互に通信し、リクエストを作成するすべての責任をiframe に委任します。http://www.api_domain.com
可能であれば、オプション 1 を使用することを強くお勧めしhttp://www.api_domain.com
ます。同じドメインの API に触れるように記述するのと同じ方法で、API を使用する Javascript コードを記述できるからです。iframe アプローチを使用するには、AJAX のような要求を iframe に送信するためのフレームワークを学習または作成する必要があり、成功およびエラー ハンドラーを使用します。また、iframe にロードするコードを作成する必要があることも意味します。これは、API URL をヒットするための薄いラッパーの全体のチャンクになります。最初のアプローチよりも醜く、トリッキーで、理解するのが難しいようです。
ただし、オプション 1 を IE で機能させる方法がわかりません。私はAccess-Control-Allow-Credentials: true
API URL を設定していますが、他のすべてのブラウザはそれらの URL に Cookie を送信しますが、IE 9 は xdr.js ライブラリを使用しても送信しません。(IE 8 ではテストしていません。) 他に報告すべき症状はありません。IE の開発者ツールで応答を表示すると、適切なヘッダーAccess-Control-Allow-Origin
とヘッダーが表示されますが、要求には Cookie ヘッダーがありません。Access-Control-Allow-Credentials
www.api_domain.com
Internet Explorerにヘッダーを尊重させるために使用できるハックまたは魔法の呪文Access-Control-Allow-Credentials
、またはIEが認識する他のヘッダーを使用できますか?