CORS применяется только в браузерах, и поэтому все остальное не затронет проблемы CORS.
Предварительный запрос OPTIONS - это запрос проверки того, что ваш сервер принимает запросы CORS перед тем, как выполнить настоящий запрос POST. Если запросы OPTIONS обнаружат, что сервер имеет необходимые CORS заголовки , он выполнит запрос POST. В противном случае он даже не сделает запрос POST (почему он должен тратить свое время, делая запрос, если он уже знает из запроса OPTIONS, что у него нет разрешения от сервера на это).
Есть 2 подхода для решения этой проблемы:
(1) Добавьте соответствующий заголовок CORS к ответу сервера, убедившись, что сервер принимает PUT POST DELETE GET OPTIONS (и, возможно, HEAD)
(2) Используйте прокси для перезаписи URL. Браузер отправляет запрос к конечной точке в том же домене и порту (таким образом избегая CORS), а сервер, обслуживающий ваше приложение Angular, переписывает запрос в другой домен и порт. Для среды разработки вы можете запустить webpack для запросов прокси таким образом с флагом --proxy-config
(Webpack используется Angular CLI под капотом). Используйте флаг --proxy-config
в стартовом скрипте npm. Вам нужно будет воспроизвести эту конфигурацию на вашем сервере Prod.
Для (2) на вашем dev-сервере создайте файл с именем proxy.json следующим образом:
{
"/api": {
"target": "http://localhost:9000",
"secure": false
}
}
И запустите ваш сервер Angular CLI с помощью:
ng serve --proxy-config ./proxy.json
Эта конфигурация в основном говорит прокси любой запрос, начинающийся с / api в пути к целевому домену и порту.
Как я уже сказал, вам нужно будет повторить это на вашем сервере prod, который зависит от того, какой сервер вы используете в prod. Вам также необходимо убедиться, что все вызовы API начинаются с / api в пути.