Почему IE8 возвращает кэшированный результат для последовательных идентичных сообщений XDomainRequest? - PullRequest
0 голосов
/ 16 января 2012

В моем приложении мне нужно было периодически отправлять HTTP-запросы POST между доменами для получения актуальных данных с сервера (периодический опрос).Приложение не работало в IE8, пока оно было в Chrome.Поэтому я решил отладить это с помощью Wireshark:

Я выполнил 2 эквивалентных кода в IE8 и Chrome.Я контролировал свою сеть с помощью 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 ведет себя так и есть ли способ решить эту проблему иначе, чем я?Обратите внимание, что я не могу использовать один и тот же прием для запросов GET.

Кстати, запрос и ответ для IE выглядят следующим образом:

request:

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

response:

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: *

1 Ответ

2 голосов
/ 18 января 2012

Похоже, что в ответе нет кэширующих заголовков, поэтому браузеры могут вести себя по-разному.Можете ли вы добавить следующий заголовок к ответу: Cache-Control: no-cache

...