CORS с jQuery и XDomainRequest в IE8/9

ОБНОВЛЕНИЕ:Я настоятельно рекомендую не тратить время на XDomainRequest, потому что это ужасно плохая реализация со многими ограничениями. В основном это действительно работает только для GET-запросов к серверам, отличным от -ssl, поэтому вы также можете использовать jsonp или что-то еще.


Я использую CORS для вызова междоменного API, однако Internet Explorer вызывает проблемы. CORS должен быть возможен в IE8 и IE9 через объект XDomainRequest, однако я не могу заставить все работать.

JQuery отказывается предоставлять встроенную поддержку XDomainRequest, однако для добавления этой поддержки предлагается несколько подключаемых модулей jQuery. Этот топик предлагает два таких плагина:jQuery.XDomainRequest.js и xdr.js , которые, как сообщается, работают. На самом деле, плагины должны автоматически переопределять поведение jQuery.ajax. Я нашел еще один плагин здесь .

Я разместил несколько демонстрационных страниц с соответствующими плагинами jQuery.XDomainRequest и xdr и jquery.ie.cors , которые выполняют ajax-запросы к серверу с поддержкой CORS. Страницы работают в Chrome и Firefox, однако IE8/9 мгновенно выдает ошибку отказа в разрешении (еще до выполнения запроса ). Этот пост MSDN предлагает добавить еще один обработчик xhr.onprogress = function() {};, но я попробовал это, и это тоже не работает.

Любые подсказки, что я делаю неправильно?Я также тестировал IE8, используя виртуальный сервер MS, но у него точно такая же проблема.

Изменить :ОК, поэтому я понял, что часть проблемы заключалась в том, что я использовал POST через HTTPS. По-видимому, XDomainRequest не разрешает CORS через HTTPS. Я могу переключиться на HTTP, но мне действительно нужен POST.

Edit2 :См. этот выпуск на github для завершения этой истории. Оказывается, при использовании HTTP POST xDomainRequest может кодировать только тело запроса (аргументы )как text/plain. Это в значительной степени делает его бесполезным, потому что все используют application/x-www-form-urlencodedили multipart/form-data.

62
задан Community 23 May 2017 в 12:17
поделиться