久しぶりに、とあるサイト用にJavaScriptを書いていて出てきた問題。
Firefox等からだとXMLHttpRequestを使って普通にGET出来るページが、何故かIE8のときにはうまくGET出来ない。
いろいろ調べていたのだが、当該サイトが日本語JPドメイン名を使用しており、かつ、サーバ側でHTTPリクエストヘッダのRefererを(自身のドメインから来たものか)チェックしていたのが原因だったらしい。
こんな風になる
例えば
javascript:(function(x){x=new XMLHttpRequest();x.open('get',location.href+'?'+new Date().getTime());x.send('')})()
こんな感じのブックマークレット(単に今見ているページをGETするだけ)を日本語.jp等で実行し、Wiresharkなんかで見てみると、
Firefoxの場合
0000 52 65 66 65 72 65 72 3a 20 68 74 74 70 3a 2f 2f Referer: http:// 0010 78 6e 2d 2d 77 67 76 37 31 61 31 31 39 65 2e 6a xn--wgv71a119e.j 0020 70 2f 0d 0a p/..
IE8の場合
0000 52 65 66 65 72 65 72 3a 20 68 74 74 70 3a 2f 2f Referer: http:// 0010 e6 97 a5 e6 9c ac e8 aa 9e 2e 6a 70 2f 0d 0a ..........jp/..
みたいな感じで、IE8だとHTTPリクエストヘッダのRefererが化けてしまっている。
ちなみに、Hostはさすがに化けていない。
なお、普通にリンク等で移動した場合のRefererは化けないみたいなので、XMLHttpRequestに特化した問題なのかもしれない。
さて、原因が判明したのはいいとして、じゃあどうやって解決しようかなぁ……トオイメ。