@juniorspecialist
Джуниор

Как отправить кросс-доменный запрос в IE8?

Всем привет!
Необходимо отправлять кросс-доменный запрос из разных браузеров. В фаерфорксе и Хроме пашет, в IE11 - тоже пашет, а вот в IE8 не пашет.
Пример кода:
if(window.XMLHttpRequest){
            xhr = new XMLHttpRequest();
        }
        else if(window.ActiveXObject){
            try{
                xhr = new ActiveXObject('Msxl2.XMLHTTP');
            } catch (e){}
            try{
                xhr = new ActiveXObject('Microsoft.XMLHTTP');
            } catch (e){}
        }
    if(xhr){
        xhr.open("POST", 'http://mysite.ru', true);//отказано в доступе
        xhr.setRequestHeader('Content-type', 'application/json; charset=utf-8');
        xhr.onreadystatechange = function() {};
        xhr.withCredentials = true;
        xhr.send(json);
   }


И вот в этой строке в IE8 вылазит ошибка - xhr.open("POST", 'mysite.ru', true); ошибка - отказано в доступе.
Возможно это связано с особенностями версии, не знаю, погуглил и не смог найти ответа.
В крадце отправляю кросс-доменный запрос с сайта А на сайт Б, в браузерах - Хром,Фаерфокс и IE11 работает норм. В некоторых более старый версиях IE ошибка. Как победить эту проблему ? Вариант отправлять с помощью Jquery не предлагать, я использую чистый JS и ради отправки запросов использовать либу - не вариант.
  • Вопрос задан
  • 598 просмотров
Пригласить эксперта
Ответы на вопрос 1
@antonre
Во первых, проверьте, отдаёт-ли веб-сервер конечного сайта заголовок

Access-Control-Allow-Origin:*

Подробнее можно изучить здесь.

Во вторых, если обращение идет не на https, то IE8 будет выдавать предупреждающее окно.
Если в нем выбрать "Нет", то выбор запоминается на время сессии, и будет ошибка доступа.

cffc82d3eeb24351baa1bbeb79139645.png
В IE9- используется XDomainRequest, который представляет собой урезанный XMLHttpRequest.
На него действуют ограничения:
  • Протокол нужно сохранять: запросы допустимы с HTTP на HTTP, с HTTPS на HTTPS. Другие протоколы запрещены.
  • Метод open(method, url) имеет только два параметра. Он всегда асинхронный.
  • Недоступны методы, кроме GET или POST.
  • Нельзя добавлять свои заголовки, даже нельзя указать свой Content-Type для запроса, он всегда text/plain.
  • Нельзя включить передачу кук и данных HTTP-авторизации.
  • В IE8 в режиме просмотра InPrivate кросс-доменные запросы не работают.

Подробнее можно почитать здесь
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы