クロスドメイン対応

2013/03/21 | jQuery

どうも最近はクロスドメインでもjsonを扱えるらしい。なんでもCross-Origin Resource Sharing(CORS)というらしい。

仕事でサーバ処理の担当者から、「jsonの通信先サーバ変えるんで」とか言われて心配した。Access-Control-Allow-Originレスポンスヘッダを返せば大丈夫、との言葉を信じて言われるままにURLを書き換えたのだが・・・結果騙された。IE動かないじゃん。

jQueryでAjax通信しているのだが、これ単発では対応できないことが調べてみて初めてわかった。怒っても始まらないのでもう少しまじめに調べてみた。

最近のモダンブラウザはたいてい大丈夫らしいが、IE8、IE9は実装方法が違うらしいのでNG。IE7以前は非対応。IE10以降で他のブラウザたちと足並みをそろえるらしい。たいていのブラウザはAjaxでCORSする際、XMLHttpRequestを使用するが、IEだけはXDomainRequestってのを使い、かつjQueryはXDomainRequestを使っていないので、必然的にjQuery単体ではCORSなAjax通信ができないということらしい。Firefoxtとかで動いていても、IEでコンソール出力すると「アクセスが拒否されました」とか出力される。

この時点でサーバ担当者に「やっぱ戻したほうが」と相談しようかと思ったけどたまたま外出中だったので、もう少し調べてみた。そしたら、やっぱり世の中には大変良くできた方がいらっしゃって、jQueryのプラグインっぽい形式で、ブラウザによる分岐処理を発見した。

詳しい説明はこちら(CORSによるクロスドメイン通信の傾向と対策)

結果として、見事にIEでも取得することができた。サーバ担当者には追加費用を請求したいくらいだったが、今回は勉強になったのでよしとすることにした。

 


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net