Access-Control-Allow-Origin
- это заголовок ответа, который должен отправить сервер, на который идет запрос.
А все остальные Access-Control-Allow-*
заголовки - это заголовки ответов для отправки серверами.
Если вы не контролируете сервер, на который отправляется ваш запрос, а проблема с ответом от этого сервера заключается в отсутствии заголовка Access-Control-Allow-Origin
или других заголовков Access-Control-Allow-*
, вы все равно можете заставить все работать - отправив запрос через CORS прокси.
Вы можете легко запустить свой собственный прокси, используя код из https://github.com/Rob--W/cors-anywhere/.
Вы также можете легко развернуть собственный прокси на Heroku всего за 2-3 минуты с помощью 5 команд:
git clone https://github.com/Rob--W/cors-anywhere.git
cd cors-anywhere/
npm install
heroku create
git push heroku master
После выполнения этих команд у вас будет работать собственный сервер CORS Anywhere, например, https://cryptic-headland-94862.herokuapp.com/
.
Теперь добавьте к URL-адресу вашего запроса префикс URL-адреса вашего прокси:
https://cryptic-headland-94862.herokuapp.com/https://example.com
Добавление URL-адреса прокси в качестве префикса приводит к тому, что запрос выполняется через ваш прокси, который затем:
- Перенаправляет запрос на
https://example.com
.
- Получает ответ от
https://example.com
.
- Добавляет заголовок
Access-Control-Allow-Origin
к ответу.
- Передает этот ответ с добавленным заголовком обратно запрашивающему коду внешнего интерфейса.
Затем браузер позволяет коду внешнего интерфейса получить доступ к ответу, потому что этот ответ с заголовком ответа Access-Control-Allow-Origin
- это то, что браузер видит.
Это работает, даже если запрос запускает браузеры для выполнения запроса OPTIONS
предварительной проверки CORS, потому что в этом случае прокси также отправляет обратно заголовки Access-Control-Allow-Headers
и Access-Control-Allow-Methods
, необходимые для успешной предварительной проверки.
И если у вас есть код внешнего интерфейса, который добавляет заголовок Access-Control-Allow-Origin
или другие заголовки Access-Control-Allow-*
к запросу на стороне клиента, удалите этот код - потому что единственный эффект, который вы производите, добавляя эти заголовки запроса, заключается в том, что вы запускаете свой браузер для отправки OPTIONS
запрос CORS, а не фактический GET
или POST
запрос в вашем коде.
person
sideshowbarker
schedule
28.05.2017