読者です 読者をやめる 読者になる 読者になる

風柳メモ

ソフトウェア・プログラミング関連の覚書が中心。

IE8のXMLHttpRequestだと、日本語JPドメイン名のRefererが化けてしまう

javascript

久しぶりに、とあるサイト用に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に特化した問題なのかもしれない。
さて、原因が判明したのはいいとして、じゃあどうやって解決しようかなぁ……トオイメ。