Я застрял с этой проблемой CORS, хотя я установил сервер (nginx / node.js) с соответствующими заголовками.
Я вижу на панели Chrome Network -> Заголовки ответа:
Access-Control-Allow-Origin:http://localhost
который должен сделать свое дело.
Вот код, который я сейчас использую для тестирования:
var xhr = new XMLHttpRequest();
xhr.onload = function() {
console.log('xhr loaded');
};
xhr.open('GET', 'http://stackoverflow.com/');
xhr.send();
я получил
XMLHttpRequest не может загрузить http://stackoverflow.com/ . Источник http: // localhost не разрешен Access-Control-Allow-Origin.
Я подозреваю, что это проблема в клиентском скрипте, а не в конфигурации сервера ...
Ответы:
Chrome не поддерживает localhost для запросов CORS (ошибка, открытая в 2010 году и помеченная как WontFix в 2014 году).
Чтобы обойти это, вы можете использовать домен, подобный
lvh.me
(который указывает на 127.0.0.1, как localhost) или запустить chrome с--disable-web-security
флагом (при условии, что вы просто тестируете).источник
Grrrr...
Согласно ответу @ Beau, Chrome не поддерживает локальные CORS-запросы, и вряд ли что-то изменится в этом направлении.
Я использую расширение Allow-Control-Allow-Origin: * Chrome, чтобы обойти эту проблему. Расширение добавит необходимые заголовки HTTP для CORS:
Исходный код опубликован на Github .
Обратите внимание, что расширение фильтрует все URL по умолчанию. Это может сломать некоторые веб-сайты (например, Dropbox). Я изменил его, чтобы фильтровать только локальные URL со следующим фильтром URL
источник
Access-Control-Allow-Credentials: true
поскольку он устанавливаетAccess-Control-Allow-Origin
для*
и имеющих какtrue
и*
блокируется браузерами. Если вы используете учетные данные true, вы должны использовать источник без подстановочных знаков. Я рекомендую Moesif Origins и CORS Changer Extension, которые позволяют менять заголовки так, как вы хотите.Реальная проблема в том, что если мы установим
-Allow-
для всех запрос (OPTIONS
&POST
), Chrome отменит его. Следующий код работает для меня сPOST
LocalHost с Chromeисточник
Chrome будет делать запросы с CORS от
localhost
источника просто отлично. Это не проблема с Chrome.Причина, по которой вы не можете загрузить,
http://stackoverflow.com
заключается в том, чтоAccess-Control-Allow-Origin
заголовки не позволяют вамlocalhost
отправиться.источник
Быстрое и грязное исправление расширения Chrome:
Moesif Orign & CORS Changer
Тем не менее, Chrome поддерживает перекрестные запросы от localhost. Не забудьте добавить заголовок
Access-Control-Allow-Origin
дляlocalhost
.источник
У меня не работает ни одно из расширений, поэтому я установил простой локальный прокси. В моем случае https://www.npmjs.com/package/local-cors-proxy Это 2-минутная установка:
(с их сайта)
Для меня это сработало: ваше приложение вызывает прокси, который вызывает сервер. Ноль проблем CORS.
источник
Я решил не трогать заголовки и вместо этого сделать переадресацию на стороне сервера, и это просыпается как очарование.
Пример ниже относится к текущей версии Angular (в настоящее время 9) и, возможно, к любой другой платформе, использующей веб-пакеты DevServer. Но я думаю, что тот же принцип будет работать на других серверах.
Поэтому я использую следующую конфигурацию в файле proxy.conf.json :
В случае Angular я работаю с такой конфигурацией:
Я предпочитаю использовать прокси в команде serve, но вы также можете поместить эту конфигурацию в angular.json следующим образом:
Смотрите также:
https://www.techiediaries.com/fix-cors-with-angular-cli-proxy-configuration/
https://webpack.js.org/configuration/dev-server/#devserverproxy
источник