旧それなりブログの跡地、画像やスタイルやJSなどが壊れてることがあります。

非同期クロスドメイン通信でCookieを送信したかった

2011年3月24日

Ajaxによるクロスドメインリクエストでドハマりました。
未解決なんでセーブしときます。

IE8だとJSONPででCookieヘッダを送信できない

IE8だと、クロスドメイン通信にJSONPを使ってもCookieヘッダを送信できない。
追記:最後に書きました、これはP3Pポリシーによるブロックでした。

これを、最近のブラウザだと大体実装されている
XMLHttpRequest Level 2 の仕様で解決しようとしたのが始まり。

↓によると、

Google App Engineでクロスドメイン通信

API側で ‘Access-Control-Allow-*’ なヘッダを設定してやると、出来るらしい。

しかし、出来ない

・・・が、XMLHttpRequest(or XDomainRequest) による
クロスドメインリクエストまでは出来たけど、
Cookieヘッダの送信までは出来なかった。
ということで、参考にしたサイトややったとこなどのメモを残す。

IE8+jQueryによるクロスドメイン通信とXDomainRequestラッパーの作成
※標準jQueryはIE8のXDomainRequestに対応してないので、その対応方法
※これと、Access-Control-Allow-* なヘッダを調整することで、
 Cookieの送信以外は、IE8 と Firefox で動いた

Access-Control-Allow-Origin試してみた。その2
※FirefoxでもCookieが送信できないので、まずはその解決からと参考にしたサイト
※ここでハマってストップ!

HTTP access control – MDC Doc Center
※本家ドキュメント、日本語版はまだは無い
※ここを読み込めばわかるんだろうけど、ちょっと読んで止めた

Access-Control-Allow-Origin で Firefox の same origin policy を乗り越える
※同ドメインでもポートが違うとCookieヘッダは送信されなかった

http://friendfeed.com/koko1000ban/188b3842/access-control-allow-origin
※Access-Control-Allow-Originは複数指定できないみたい(未確認)
※これも未確認だけど、’*’ だとダメなこともあるらしいので、
 そうだとすると、複数指定できないのがネックになることも有り得る

Ajax – Goodbye, JSONP. Hello, Access-Control-Allow-Origin
※直接関係ないけど、XMLHttpRequestやXDomainRequestのわかり易いサンプルで

そもそも

IE6・7で使えないことで、直近は不必要なものだった。
冷静さを失っていました・・・。

何でヒットしねーんだろ?

“IE8 JSONP Cookie” とかでググっても、
Cookieヘッダが送れない件が一向にヒットしないのは何故なんだろう?

大幅に間違えてる気がスル

追記:大幅に間違えてました

IEでダメだったのは、P3Pポリシーによるブロックが原因でした。
IEでクロスドメインのiframe内のcookieが取れない

API側でSet-Cookieをするときに、P3Pヘッダでポリシーを決めてやればよかったんでした。

その他参考)
P3Pコンパクトポリシーをコピペするのが流行らないことを祈る
※コンパクトポリシーの CAO PSA CUR の解説

@tanabe さんありがとうございます!

・・・これ、アフィリエイトサイトを作るときにやってたわ・・・・・・・・・・・・・。

追記:XMLHttpRequest Level 2 の有用性チェックリスト

後日必要になるかもなので、チェックリストを作っとく。

  • GET, POST に対応しているか
  • Cookieヘッダは送れるか
  • もし、Access-Control-Allow-Origin: * 指定がダメな状況がある場合、
    複数サイトでの利用に対応しているか