Код ошибки Http 0 вызван CORS : ваше приложение Angular размещено на другом хосте, чем ваше приложение Java, и запросы XHR запрещены.
Чтобы решить эту проблему , вы можете использовать обратный прокси-сервер (рекомендуется) или добавить HTTP-заголовки контроля доступа на свой сервер.
Использование обратного прокси-сервера
Во время разработки
Создать proxy.json
файл в той же папке, что и ваш package.json
:
{
"/getStatusMails": {
"target": "http://IP:8090",
"secure": false,
"changeOrigin": true
}
}
И запустите свой Angular dev-сервер с --proxy-config proxy.json
:
ng serve --proxy-config proxy.json
Теперь вместо отправки запроса на http://IP:8090/getStatusMails
, вы можете просто запросить /getStatusMails
.
Если у вас несколько сервисов, вы можете определить для них общий префикс (например, /api
или /rest
):
/api/getStatusMails
/api/getUsers
(хотя я бы рекомендовал следовать соглашениям об именах REST ).
А затем настройте прокси используя префикс:
{
"/api": {
"target": "http://IP:8090",
"secure": false,
"changeOrigin": true
}
}
В производственной среде вам нужно либо развернуть все на одном сервере Java, либо вам необходимо настроить обратный прокси на своем веб-сервере (Apache Httpd или Nginx).
Apache Httpd
Вы должны включить mod_proxy
, а затем вы можете настроить это с ProxyPass
и ProxyPassReverse
:
ProxyPass "/getStatusMails" "http://IP:8090/"
ProxyPassReverse "/getStatusMails" "http://IP:8090/"
Вы можете найти дополнительную информацию в Apache Http-документации .
Nginx
Использование свойства proxy_path
:
location /getStatusMails {
proxy_pass http://IP:8090/;
}
Дополнительную информацию можно найти в документации Nginx .
Использование HTTP-заголовков контроля доступа
В этой конфигурации веб-браузер пользователя отправит запрос OPTION перед отправкой реального запроса XHR.
Ваше приложение Java должно отправлять заголовки Access-Control-Allow-Origin
и Access-Control-Allow-Methods
, чтобы разрешить запросы из разных источников.
Например, во время разработки вы можете отправить:
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST
Чтобы разрешить запросы GET и POST с любых URL-адресов.
В производстве вы никогда не должны использовать *
и всегда укажите реальный URL-адрес вашего интерфейса.
Поскольку вы, похоже, используете Spring, вы можете просто аннулировать Укажите в своем методе @CrossOrigin
для отправки этих заголовков. Дополнительную информацию об этом можно найти в документации Spring .