Открытый API выдает мне ошибку CORS при вызове axios в create-реагировать-приложение, но все хорошо в Chrome и Почтальон - PullRequest
0 голосов
/ 27 мая 2019

Простите за очевидную ошибку, которую я, очевидно, совершаю ...

Я понимаю CORS, как и почему он используется.Но я упускаю слепо очевидное в этом случае.

Я пытаюсь получить доступ к общедоступному API, который должен работать нормально (я был уверен)

Если я попаду в конечную точкув Chrome или в Postman все работает нормально: возвращается замечательный JSON.

Когда я пытаюсь сделать то же самое, используя axios из моего 1013 * приложения create-реагировать на приложение, я получаю ошибку CORSв частности

Access to XMLHttpRequest at 'http://some-interesting-url/sub-url?blabla=blip&foo=bar' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Что я не понимаю?Могу ли я что-нибудь сделать с моей стороны?(Я не контролирую сервер)

1 Ответ

1 голос
/ 27 мая 2019

Приложение «Почтальон» не является браузером, поэтому оно не связано правилами CORS.В браузере также попытка прямого доступа к URL-адресу не приводит к появлению политик перекрестного источника запросов-общего доступа.CORS по определению будет влиять только на запросы «кросс-источника», сделанные из фонового кода JS веб-страницы, на другую веб-страницу или API, не размещенные на том же доменном имени.

На основании опубликованной ошибкирассматриваемый API не отправляет заголовок Access-Control-Allow-Origin.Если возможно изменить API, добавьте к ответу заголовок (со значением '*' или именем вашего домена).Однако если это невозможно, вам нужно будет направить запрос через принадлежащий вам веб-сервер и включить туда этот заголовок.Этот тип работает как прокси-сервер, хотя и для специализированного варианта использования.

Если у вас уже запущено какое-либо приложение на стороне сервера, вы можете просто добавить другую конечную точку в ваше приложение.Вызов этой новой конечной точки должен инициировать вызов «Public API» и отправить ответ обратно клиенту.Поскольку серверная программа (например, PHP / Python / NodeJS) никогда не будет браузером, они не столкнутся с проблемами CORS.Если ваша исходная веб-страница также загружена с того же веб-сервера, тогда заголовок ответа можно пропустить.

...