XMLHttpRequest cannot load http://localhost:8080/api/test. Origin http://localhost:3000 is not allowed by Access-Control-Allow-Origin.
Я прочитал о междоменных запросах ajax и понял основную проблему безопасности. В моем случае 2 сервера работают локально, и им нравится включать междоменные запросы во время тестирования.
localhost:8080 - Google Appengine dev server
localhost:3000 - Node.js server
Я отправляю запрос ajax, localhost:8080 - GAE server
пока моя страница загружается с сервера узлов. Что является самым простым и безопасным (не хочу запускать Chrome с disable-web-security
опцией). Если я должен измениться 'Content-Type'
, я должен сделать это на сервере узла? Как?
Ответы:
Так как они работают на разных портах, они разные JavaScript
origin
. Неважно, что они находятся на одной машине / имени хоста.Вам необходимо включить CORS на сервере (localhost: 8080). Проверьте этот сайт: http://enable-cors.org/
Все, что вам нужно сделать, это добавить HTTP-заголовок на сервер:
Или, для простоты:
Мысль не используйте "*", если ваш сервер пытается установить cookie, и вы используете
withCredentials = true
Вы можете прочитать больше о
withCredentials
здесьисточник
Access-Control-Allow-Origin
заголовок должен быть добавленным заголовком к HTTP-ответам, которые отправляет сервер. Этот заголовок должен быть частью ответа сервера, он не должен быть частью запроса клиента . В частности, то, что происходит, прежде чем клиент сделает фактический запрос, который вы хотите, браузер отправляетOPTIONS
запрос перед ним, и если ответ сервера на этотOPTIONS
запрос не содержит заголовок, браузер не будет отправлять желаемый запрос.Если вам нужно быстро обойти Chrome для запросов ajax, этот плагин chrome автоматически позволяет получить доступ к любому сайту из любого источника, добавив соответствующий заголовок ответа.
Расширение Chrome Allow-Control-Allow-Origin: *
источник
Вы должны включить CORS, чтобы решить эту проблему
если ваше приложение создано с помощью простого node.js
установите его в заголовках вашего ответа, как
если ваше приложение создано с помощью экспресс-фреймворка
использовать промежуточное программное обеспечение CORS, как
и подать заявку через
Вот две ссылки
источник
config.allowedDomains
. скажи в моем случае, что Ури я должен поставить там?*
илиspecific domain
вы хотите дать доступ.app.configure()
не ошибка функции?Я принимаю ответ @Rocket hazmat, который привел меня к решению. Это было действительно на сервере GAE, мне нужно было установить заголовок. Я должен был установить эти
установка только
"Access-Control-Allow-Origin"
дала ошибкуКроме того, если маркер авторизации должен быть отправлен, добавьте это тоже
Также на клиенте установите
withCredentials
это вызывает 2 запроса на отправку на сервер, один с
OPTIONS
. Auth cookie не отправляется вместе с ним, поэтому нужно обрабатывать сторонние auth.источник
В router.js просто добавьте код перед вызовом методов get / post. У меня работает без ошибок.
источник
Я столкнулся с проблемой при вызове ресурса перекрестного источника с использованием ajax из Chrome.
Я использовал узел js и локальный сервер http для развертывания приложения js узла.
Я получаю сообщение об ошибке при доступе к ресурсу кросс-источника
Я нашел одно решение по этому вопросу,
1) Я добавил приведенный ниже код в мой файл app.js
2) В моей html-странице, называемой ресурсом перекрестного происхождения, используется
$.getJSON();
источник
Если вы используете Express, вы можете использовать промежуточное программное обеспечение Cors следующим образом:
источник
Добавьте это на ваш сервер NodeJS ниже импорта:
источник
Если после этого вы получили 403, уменьшите фильтры в конфиге WEB.XML tomcat до следующего:
источник
Я наконец получил ответ для Apache Tomcat8
Вы должны отредактировать файл tomcat web.xml.
вероятно, это будет внутри папки webapps,
найти и отредактировать
Это позволит Access-Control-Allow-Origin всем хостам. Если вам нужно изменить его со всех хостов на только хост, вы можете отредактировать
вышеуказанный код от * до вашего http: // your_public_IP или http://www.example.com
Вы можете обратиться сюда к документации фильтра Tomcat.
Спасибо
источник
Привет Это способ решения проблемы CORS в узле. Просто добавьте эти строки на стороне сервера "api" в Node.js (или в любом другом файле вашего сервера), прежде чем обязательно установить "cors".
источник
используйте dataType: 'jsonp', у меня работает.
источник
Для PHP используйте это, чтобы установить заголовки.
источник
добавьте это к вашим маршрутам, которые вы вызываете из внешнего интерфейса. Например, если вы вызываете http: // localhost: 3000 / users / register, вы должны добавить этот фрагмент кода в свой внутренний файл .js, который лежит по этому маршруту.
источник
Если кто-то ищет решение, если вы используете экспресс здесь, это быстрое решение.
1) установить cors с помощью npm
npm install cors --save
2) импортировать его [требуется]
const cors = require('cors')
3) использовать его как промежуточное ПО
app.use(cors())
для получения подробной информации и использования Cors . Вот и все, надеюсь, это работает.
источник
Если вы находитесь в Google Chrome, попробуйте установить это дополнение:
https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi/related
источник