Почему запросы CORS не работают в Microsoft Edge, но работают в других браузерах?

Я использую jQuery для отправки запросов ajax cross origin, и они отлично работают в IE11, Chrome и Firefox, но они терпят неудачу в Edge со следующей ошибкой:

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

интересно то, что я использовал Fiddler, чтобы попытаться выяснить, что происходит, и когда Fiddler работает и захватывает запросы, все работает нормально. Как только я закрываю Fiddler или пауза захватить его снова терпит неудачу.

сайт работает на моем локальном компьютере (webpack-dev-server), делая запросы по локальной сети к службе WebAPI.

мой файл hosts настроен следующим образом:

127.0.0.1   local.myapp.test
192.168.0.111   api.myapp.test

это не должно быть проблемой в производстве, поскольку сайт и API будут размещены в одном месте, но это бесценно для разработки и тестирования.


обновление:

благодаря Eric Law я теперь знаю, почему он вел себя по-другому с включенным Fiddler-Edge переключался в зону локальной интрасети из-за изменения настроек прокси-сервера Fiddler, а зона интрасети имеет более низкий уровень безопасности.

скрипач форум ответ

Я собираюсь поднять уровень безопасности зоны локальной интрасети до среднего уровня, чтобы соответствовать зоне Интернета, а затем использовать Fiddler, чтобы попытаться выяснить, почему Edge расстроен запросом CORS.

3 ответов


Я столкнулся с этим вопросом, и после попытки нескольких вариантов, что сработало для меня, это удаление домена, над которым я работаю, из всех записей сайта зоны. С помощью местных.приложение myapp.тест в качестве примера я проверил любой "anysubdomain".приложение myapp.протестируйте, записи и удалите их из всех зон, включая все поддомены или записи wild card.

в Internet Options (IE 11) выберите безопасность tab, и в "местная интрасеть" выберите "сайты" тогда "дополнительно " и удалены соответствующие ссылки на домен там.

в "надежные сайты" выберите "сайты " и удалил соответствующие записи из списка там


я включу ниже, дословно, ответы, которые Эрик Лоуренс (создатель скрипача) любезно предоставил на форуме скрипача:

одна из возможностей заключается в том, что ваш компьютер настроен с зоной интрасети и что зона интрасети зависит от сценария конфигурации прокси: http://blogs.msdn.com/b/ieinternals/archive/2012/06/05/the-local-intranet-security-zone.aspx - ... Когда Fiddler работает, настройки прокси-сервера указывают на сам Fiddler.

... здесь работает еще один фактор, если вы используете сайт интрасети в качестве цели XHR с сайта в интернет-зоне.

Edge работает в расширенном защищенном режиме (AppContainer). Это имеет функцию, которая блокирует доступ к ресурсам частной сети из процессов Интернет-зоны. См. раздел "ресурсы частной сети" http://blogs.msdn.com/b/ieinternals/archive/2012/03/23/understanding-ie10-enhanced-protected-mode-network-security-addons-cookies-metro-desktop.aspx для получения более подробной информации.

Я добавил local.приложение myapp.тест (URL, с которого я запускаю свой SPA) в зону локальной интрасети в Internet Options, и теперь Edge счастлив без необходимости скрипача.


в about: флаги внутри Edge убедитесь, что "разрешить localhost loopback (это может поставить ваше устройство под угрозу)" проверено.