С помощью модуля узла CORS Anywhere

При получении данных API часто встречается ошибка «Нет заголовка Acces-Control-Allow-Origin» в запрошенном ресурсе ». Выглядит это примерно так:

Существует отличное решение для устранения этой ошибки. Ошибка часто возникает при выполнении выборки в API, в котором реализованы ограничения CORS.

Что вы делаете, когда у вас нет контроля над политиками CORS внутреннего сервера?

При изучении документации Access-Control-Allow-Origin кажется, что эту проблему можно решить, просто добавив заголовок с подстановочным знаком:

'Access-Control-Allow-Origin: *'

Для запросов без учетных данных буквальное значение * может быть указано как подстановочный знак; значение указывает браузерам разрешить запрос кода из любого источника для доступа к ресурсу. Попытка использовать подстановочный знак с учетными данными приведет к ошибке.

Получение часто бывает неудачным, и первоначальная ошибка все равно появляется. Если вам удалось безошибочно использовать заголовок с подстановочным знаком, обязательно сообщите о последствиях для безопасности.

Другое решение включает использование подключаемого модуля Chrome, который, если вы сможете заставить его работать с API, не будет подходить для производства, поскольку вы не можете ожидать, что пользователи установят подключаемый модуль браузера для использования основных функций вашего приложения.

Распространенным решением является использование корс-где угодно, добавляя cors-anywhere.herokuapp.com в начало URL-адреса для получения, чтобы создать прокси. Однако это всего лишь пример прокси. Политика допустимого использования Heroku не позволяет развертывать общедоступный прокси-сервер, поэтому конкретная версия прокси-сервера имеет ограничение скорости.

Вы можете использовать тот же самый точный код, чтобы развернуть тот же прокси на локальном сервере и / или разместить его на Heroku, если вы используете его в производстве (в этом случае вы можете занести в белый список URL-адрес своего внешнего приложения, чтобы избежать необходимости следить за скоростью ограничивающее требование).

С помощью cors -where вы можете развернуть собственный прокси-сервер и устранить ошибку всего за несколько минут.

Инструкции по использованию cors-где угодно в приложении React.js

  1. Установите узловой модуль: npm i cors-anywhere
  2. Обслуживайте прокси из модуля узла: cd node_modules/cors-anywhere/lib/ && npm run start.
  3. Вероятно, адрес прокси-сервера http://localhost:8080.
  4. Добавьте URL-адрес прокси в начало всех URL-адресов, по которым выполняется выборка. Это может выглядеть примерно так: http://localhost:8080/https://your-api-endpoint...

Теперь ошибка должна быть устранена. Сделайте выборку еще раз, и запрошенные данные будут извлечены по желанию.

Чтобы использовать приложение в производстве, разверните прокси-сервер с помощью Heroku, затем измените URL-адрес прокси (добавленный в начало URL-адреса выборки) на новый URL-адрес развернутого прокси.

« Политика допустимого использования Heroku запрещает использование Heroku для работы с открытым прокси-сервером, поэтому убедитесь, что вы применяете белый список или ограничиваете количество запросов».

В репозитории cors -where GitHub есть инструкции, как это сделать.

Дополнительное упрощение для среды разработки

Настройте прокси-сервер на автоматическое вращение, изменив сценарий start для запуска обеих команд с помощью модуля Одновременно :

  1. npm i concurrently
  2. Измените сценарий запуска в файле package.json на: “start”: “concurrently \”react-scripts start\” \”cd node_modules/cors-anywhere/lib/ && npm run start\””,

Прокси-сервер теперь загрузится автоматически без дополнительных усилий.