2017-01-23 3 views
-1

Когда я делаю запрос $ http.post и устанавливаю свойство "withCredentials" в true. Мой запрос отлично работает в Chrome и Fiefox. Тем не менее, я получаю ошибку ниже в IE:

XMLHttpRequest: ошибка сети 0x80070005, доступ запрещен.

Я заметил, что если я включу параметр «Доступ к ресурсам данных через домены» в IE, ошибка будет решена. Однако мне нужно найти альтернативное решение, потому что я не могу попросить пользователей включить эту настройку, очевидно.

IE Setting that fixes the issue Я заметил, что $ http.get запрос к той же области а работает в IE, не вопрос, вопрос только с запросом $ http.post, Параметры запроса получает внутренний сервер 500 и I увидеть заголовки запроса и ответа ниже:

request headers in IE response headers in IE Примечание: у меня есть необходимые пользовательские заголовки, и я могу видеть их в Chrome, когда запрос OPTIONS успешно. Заголовки, которые я вижу в Chrome перечислены ниже:

Chrome request and response headers

Не могли бы вы, пожалуйста, дайте мне знать, если я что-то, что бы сделать запрос работу в IE без включения источников данных доступа между доменами не хватает?

+0

Какую версию IE вы тестируете? – Stafree

+0

Это IE 11, но я попытался переключиться на IE 10,9,8,7 на вкладке эмулятора отладчика, и я получаю ту же ошибку – user3916117

+0

Очевидно, что ваш сервер не отвечает на запрос OPTIONS правильно. исправить сервер. –

ответ

1

Internet Explorer 9 не поддерживает файлы cookie в запросах CORS. Свойство withCredentials аргументов $http пытается отправить файлы cookie. Я не думаю, что есть способ исправить это с помощью заголовков. IE10 + должен работать по умолчанию, просто убедитесь, что вы не находитесь в режиме совместимости. CORS также не полностью реализована в IE10, но тип запроса, который вы пытаетесь сделать, должен работать.

Вы не указали, какова природа вашего веб-приложения, но это влияет на тип обхода, который вам понадобится для IE9. Если возможно, посмотрите, можете ли вы реорганизовать свой код для использования запроса GET (опять же, я не знаю, что вы пытаетесь сделать через AJAX, поэтому это может быть невозможно).

Возможно, вы сможете использовать Modernizr или что-то подобное, чтобы определить, поддерживает ли браузер CORS. Если он не поддерживается, отправьте запрос без AJAX и обновите страницу.

Еще одна альтернатива, если вы действительно хотите использовать AJAX, - это настроить прокси-сервер на вашем веб-сервере, то есть на сервере в том же домене. Вместо того, чтобы напрямую запрашивать запрос перекрестного происхождения, вы делаете запрос AJAX на сервер с одинаковым исходным кодом, который затем отправляет запрос на сервер перекрестного происхождения. На сервере не будет проблем с CORS. Это решение предполагает, конечно, что у вас есть серверные сценарии, такие как PHP, Node или Java.

+0

Тип запроса, который запросил OP о не будет работать с настройками IE9 по умолчанию.Не уверен, что все, что я сказал, было неточным в этом контексте. – Stafree

+0

В частности, это использование файлов cookie (withCredentials in Angular). См .: http://stackoverflow.com/questions/10941281/make-a-cors-request-in-ie9-with-cookies – Stafree

+0

Уверен, answser отредактирован. – Stafree

Смежные вопросы