Прямоугольные API-вызовы для внешнего получения «Доступ запрещен»

Следуя документации Restangular и включает пример этого:

// GET to http://www.google.com/ You set the URL in this case
Restangular.allUrl('googlers', 'http://www.google.com/').getList();

Я пытаюсь сделать то же самое для angel.co

$scope.trial = Restangular.allUrl('googlers', 'https://api.angel.co/1/users/267770').getList();

И продолжайте получать ошибку

XMLHttpRequest cannot load https://api.angel.co/1/users/267770. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8000' is therefore not allowed access. 

Любые решения?


person Mohamed El Mahallawy    schedule 15.04.2014    source источник


Ответы (1)


Сервер (api.angel.co) не отвечает заголовками Access-Control, что приводит к этой ошибке.

При отправке запросов XHR в домены, отличные от исходного домена, веб-браузеры проверяют, разрешает ли это служба. В вашем случае api.angel.co необходимо будет включить заголовок Access-Control-Allow-Origin: * как часть ответа (чего нет).

Предполагая, что вы не можете изменить api.angel.co, альтернативой может быть создание прокси-сервера на стороне сервера (например, в node.js), который позволяет совместное использование ресурсов между источниками.

Прочтите эту замечательную статью о совместном использовании ресурсов между источниками (CORS).

person Sebastian    schedule 15.04.2014
comment
Спасибо @Sebastian за ответ. Это может показаться очень глупым, но я использую репозиторий Angular-seed (github.com/angular/angular- seed) и работает на локальном хосте:8000. Будет ли это сервер Node.js? И что происходит, когда он находится в производстве? - person Mohamed El Mahallawy; 15.04.2014
comment
Angular — это фреймворк на стороне клиента, который работает в браузере. Предлагаемый прокси-сервер node.js будет полностью отдельным компонентом, чтобы вы могли получить доступ к API. Это будет работать следующим образом: браузер (в котором запущено ваше приложение Angular) отправляет запрос API к компоненту node.js, который будет разработан (который разрешает CORS или работает на том же хосте). Затем этот компонент передаст запрос фактическому API на api.angel.io. - person Sebastian; 15.04.2014
comment
Да, я понимаю. Но с угловым семенем я работаю на сервере node.js, нет? У меня есть все файлы веб-сервера и т. д. Итак, где я могу подключить код, чтобы разрешить CORS? - person Mohamed El Mahallawy; 15.04.2014
comment
например. stackoverflow.com/questions/20036008 / но не нашел такого же кода - person Mohamed El Mahallawy; 15.04.2014
comment
Проверьте это. Вы должны разработать его как отдельный компонент, а не связывать его с тестовым веб-сервером Angular Seed. - person Sebastian; 15.04.2014