Подтвердить что ты не робот

Internet Explorer 10 игнорирует XMLHttpRequest 'xhr.withCredentials = true'

В настоящее время у меня проблема с межсетевым ajax-вызовом, использующим IE10 (в режиме IE10, а не совместимость).

Ситуация: У меня два домена, http://a и http://b. У меня есть набор файлов cookie для http://b. Я сейчас на странице http://a.

Я хочу сделать запрос CORS на http://b с помощью XMLHttpRequest (который должен работать, в соответствии с http://blogs.msdn.com/b/ie/archive/2012/02/09/cors-for-xhr-in-ie10.aspx) и включать cookie в запросе. JS выглядит следующим образом:

var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://b', true);
xhr.withCredentials = true;
xhr.send();

Это должно гарантировать, что файл cookie прикреплен к запросу; однако трассировка Fiddler показывает, что cookie не прикреплен, и я получаю 401: Access Denied.

Сервер настроен на работу с CORS, он включает заголовки Access-Control:

Access-Control-Allow-Origin: http://a
Access-Control-Allow-Credentials: true

(это не должно иметь никакого значения, поскольку запрос предварительной проверки OPTIONS отсутствует, и первый запрос IE посылает GET, а файл cookie отсутствует, что вызывает 401).

Кроме того, фрагмент JS отлично работает как в Firefox, так и в Opera.

4b9b3361

Ответ 1

Это, вероятно, такая же старая проблема IE P3P. С настройками по умолчанию IE, если cookie установлен без заголовка P3P, присутствующего в ответе, файл cookie помечен как "только для сторонних производителей". Это означает, что в стороннем контексте, таком как iframe или запрос CORS, IE откажется отправить файл cookie.

Чтобы исправить это, вы должны указать заголовок P3P при настройке файлов cookie. Подробнее см. http://msdn.microsoft.com/en-us/library/ms537343%28v=vs.85%29.aspx.

Обновление: ссылка уже мертва, но вы можете увидеть ее в в интернет-архиве

Ответ 2

У меня была аналогичная проблема, и выяснилось, что в настройках браузера блокируются сторонние файлы cookie (IE10 > Свойства обозревателя > Конфиденциальность > Дополнительно > Сторонние файлы cookie > Принять). Чтобы решить эту проблему, я проверил "Переопределить автоматическую обработку файлов cookie", "Принять" (сторонние файлы cookie) и "Всегда разрешать файлы cookie сеанса".

Ответ 3

Мы добавили заголовок Vary: cookie, и он сработал.