私のアプリケーションでは、サーバーから最新のデータを受信するために、定期的にクロスドメインHTTP POSTリクエストを行う必要がありました(定期的なポーリング)。Chromeを使用している間、アプリケーションはIE8で機能していませんでした。そこで、Wiresharkでこれをデバッグすることにしました。
IE8とChromeで2つの同等のコードを実行しました。Wiresharkでネットワークを監視しました。Wiresharkフィルターは次のとおりです。
http.request.full_uri == "http://www.andlabs.net/html5/uCOR.php"
IE8はリクエストを1回だけ送信し、次の呼び出しに対して同じキャッシュされた応答を返すことに気付きました。一方、Chromeは毎回新しいリクエストを送信します。
IE8で使用したコード:
var cor = new XDomainRequest();
cor.onload = function() { alert(cor.responseText);}
cor.open('POST', 'http://www.andlabs.net/html5/uCOR.php');
cor.send();
Chromeに使用したコード:
var cor = new XMLHttpRequest();
cor.onload = function() { alert(cor.responseText);}
cor.open('POST', 'http://www.andlabs.net/html5/uCOR.php');
cor.send();
IE8でキャッシュされた応答を防ぐために、次のコードを試しましたが、機能しました。
var cor = new XDomainRequest();
cor.onload = function() { alert(cor.responseText);}
cor.open('POST', 'http://www.andlabs.net/html5/uCOR.php');
cor.send(''+new Date());
IE8がこのように動作するのはなぜですか?私が行ったのとは異なる方法でこれを解決する方法はありますか?GETリクエストに同じトリックを使用できないことに注意してください。
ちなみにIEのリクエストとレスポンスは以下の通りです。
リクエスト:
POST /html5/uCOR.php HTTP/1.1
Accept: */*
Origin: http://jsbin.com
Accept-Language: en-US
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)
Host: www.andlabs.net
Content-Length: 0
Connection: Keep-Alive
Cache-Control: no-cache
応答:
HTTP/1.1 200 OK
Content-Type: text/html
Server: Microsoft-IIS/7.0
Access-Control-Allow-Origin: *
X-Powered-By: ASP.NET
Date: Tue, 17 Jan 2012 21:41:39 GMT
Content-Length: 180
This is a page from www.andlabs.net which is accessible from any website through Cross Origin Requests<br>This page contains the following header:<br>Access-Control-Allow-Origin: *