Ответ 1
Идеальный способ - добавить поддержку CORS на ваш сервер.
Вы также можете попробовать использовать отдельный модуль jsonp. Насколько я знаю, axios не поддерживает jsonp. Поэтому я не уверен, что метод, который вы используете, будет квалифицирован как допустимый запрос jsonp.
Есть еще одна хакерская работа для решения проблемы CORS. Вы должны будете развернуть свой код на сервере nginx, выступающем в качестве прокси-сервера как для вашего сервера, так и для вашего клиента. То, что поможет нам, - proxy_pass
директива proxy_pass
. Настройте сервер nginx таким образом, чтобы блок местоположения, обрабатывающий ваш конкретный запрос, proxy_pass
или перенаправлял ваш запрос на ваш реальный сервер. Проблемы с CORS обычно возникают из-за изменений в домене сайта. Когда у вас есть один прокси-сервер, который выступает в качестве лица вашего клиента и вашего сервера, браузер обманывается, думая, что сервер и клиент находятся в одном домене. Ergo нет CORS.
Рассмотрим этот пример.
Ваш сервер my-server.com
а ваш клиент my-client.com
Настройте nginx следующим образом:
// nginx.conf
upstream server {
server my-server.com;
}
upstream client {
server my-client.com;
}
server {
listen 80;
server_name my-website.com;
access_log /path/to/access/log/access.log;
error_log /path/to/error/log/error.log;
location / {
proxy_pass http://client;
}
location ~ /server/(?<section>.*) {
rewrite ^/server/(.*)$ /$1 break;
proxy_pass http://server;
}
}
Здесь my-website.com
будет результирующим именем веб-сайта, на котором будет доступен код (имя прокси-сайта). Как только nginx настроен таким образом. Вам нужно будет изменить запросы так, чтобы:
- Все вызовы API изменяются с
my-server.com/<API-path>
наmy-website.com/server/<API-path>
Если вы не знакомы с nginx, я бы посоветовал вам ознакомиться с документацией.
Чтобы кратко объяснить, что происходит в конфигурации выше:
-
upstream
поток определяет фактические серверы, на которые будут перенаправляться запросы. - Блок
server
используется для определения фактического поведения сервера nginx. - В случае нескольких блоков серверов
server_name
используется для идентификации блока, который будет использоваться для обработки текущего запроса. - Директивы
error_log
иaccess_log
используются для определения местоположения файлов журнала (используется для отладки) - Блоки
location
определяют обработку различных типов запросов:- Первый блок местоположения обрабатывает все запросы, начиная с
/
все эти запросы перенаправляются клиенту - Второй блок местоположения обрабатывает все запросы, начиная с
/server/<API-path>
. Мы будем перенаправлять все такие запросы на сервер.
- Первый блок местоположения обрабатывает все запросы, начиная с
Примечание: /server
здесь используется, чтобы отличить запросы на стороне клиента от запросов на стороне сервера. Поскольку домен один и тот же, другого способа различения запросов нет. Имейте в виду, что нет такого соглашения, которое заставляет вас добавлять /server
во всех таких случаях использования. Его можно изменить на любую другую строку, например. /my-server/<API-path>
, /abc/<API-path>
и т.д.
Несмотря на то, что этот метод должен сработать, я настоятельно рекомендую вам добавить поддержку CORS на сервер, поскольку это идеальный способ обработки подобных ситуаций.
Если вы хотите избежать всего этого во время разработки, вы можете использовать это расширение для Chrome. Это должно позволить вам выполнять междоменные запросы во время разработки.