2012-01-15 55 views
0

在我的應用程序中,我需要定期進行跨域HTTP POST請求以接收來自服務器的最新數據(定期輪詢)。當它在Chrome中時,該應用程序無法在IE8中運行。所以我決定用Wireshark進行調試:爲什麼IE8爲連續相同的XDomainRequest消息返回緩存結果?

我在IE8和Chrome中執行了2個等效代碼。我用Wireshark監視了我的網絡。 Wireshark的過濾器是:

http.request.full_uri == "http://www.andlabs.net/html5/uCOR.php" 

我注意到,僅IE8發送請求而返回以下調用相同的緩存響應。另一方面,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的行爲是這樣,有什麼辦法可以解決這個問題的方式不同於wha我做過了嗎?請注意,我不能對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: * 
+0

您可以包含來自uCOR.php的響應標頭嗎? – monsur 2012-01-16 14:21:39

+0

添加了請求和響應詳細信息。 – CEGRD 2012-01-17 21:54:49

回答

2

看起來沒有任何緩存頭在響應中,瀏覽器可能會有不同的表現。您可以將下列標題添加到響應中:Cache-Control: no-cache

+2

爲什麼有人想緩存郵件?它是否違反了POST的定義,它修改了服務器上的信息? – CEGRD 2012-01-18 07:14:54

相關問題