При попытке вызвать API отсутствует заголовок «Access-Control-Allow-Origin»

0

Изменение: Возможно, стоит отметить, что я зарегистрирован на домене GoDaddy, который пересылает с маскировкой на мой Bitnami IP. Мой стек находится на одном сервере, поэтому я не понимаю суть этого вопроса. Или, может быть, я понимаю это неправильно. Пожалуйста, помогите мне понять эту ошибку.

Я знаю, что есть другие темы, похожие на это, но я не видел никакой соответствующей моей настройки.

У меня есть Amazon AWS EC2 Bitnami MEAN, работающий на сайте AngularJS. Я размещаю некоторую информацию, которую я собрал извне, с некоторыми скриптами Python в mongodb, а затем у меня есть JS API, который успешно отправляет коллекцию через порт 3000... все довольно стандартно из того, что я могу сказать. Я просто изучаю эту технологию и довольно новичок.

Поэтому, когда я перехожу к API [URL]: 3000/api в Chrome, я вижу результаты JSON. Это не проблема.

Когда мой Угловой контроллер сайта попытается выполнить $ http GET в URL-адресе API, Express выведет на экран и отобразит на моей панели шпатлевки Bitnami, что я действительно попадаю в API.

НО.. Chrome дает мне эту сладкую ошибку на странице, когда я отлаживаю F12:

XMLHttpRequest cannot load **URL**. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin **URL**' is therefore not allowed access.

Извините за все поддельные URL-адреса, я новичок в stackoverflow, и он отметил, что я использую "более двух URL-адресов", потому что у меня нет 10 баллов.

Большое вам спасибо за то, что помогли мне понять эту проблему.

  • 0
    невозможно перенаправить кросс-домен запроса ajax таким образом ... чтобы ваш хост-сервер действовал как прокси и получал данные. Также обратите внимание, что разные порты имеют разное происхождение в отношении CORS
  • 0
    @charlietfl Я видел это решение и где-то еще. Снова простите мою новизну. Можете ли вы связать что-то, похожее на ELI5, о том, как выполнить настройку прокси или обратного прокси? На данный момент это работает с решением ниже, позволяя все CORS. У меня есть только GET, и это общедоступный бесплатный веб-сайт, поэтому никаких проблем с безопасностью там нет, но я бы хотел сделать это ПРАВО. = О)
Теги:
mean-stack
cors
jsonp

1 ответ

1
Лучший ответ

Причина этой ошибки проста: вы вызываете вызов API как отдельный домен из того, с которого выполняется ваше угловое приложение. Chrome или любой другой браузер обычно генерируют ошибку CORS.

Что вам нужно сделать, так это перейти в ваш API и включить белый список домена, из которого выполняется ваше угловое приложение. Я не уверен, как это делается в python, но в NodeJS ниже - это то, что я буду делать.

var cors = require('cors');
corsOptions = {
  origin: [
    'http://www.127.0.0.1:5555',
    'http://www.any-other-site-to-access.com'
  ],
  credentials: true
};
app.use(cors(corsOptions));

Для python это может помочь, не уверен http://enable-cors.org/server_appengine.html

Из документации CORS, чтобы все CORS

var express = require('express')
  , cors = require('cors')
  , app = express();

app.use(cors());

app.get('/products/:id', function(req, res, next){
  res.json({msg: 'This is CORS-enabled for all origins!'});
});

app.listen(80, function(){
  console.log('CORS-enabled web server listening on port 80');
});
  • 0
    не думайте, что это будет работать таким образом, если это перенаправление .... может быть неправильно, но это вывело бы нормальный предпечатный процесс из цикла
  • 0
    @charlietfl Я не уверен, что понимаю, что вы имеете в виду, если он устанавливает self.send_header("Access-Control-Allow-Origin", "*") Я думаю, что он должен обрабатывать все входящие запросы, даже если это перенаправление
Показать ещё 9 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню