Доброго времени суток, коллеги!
Расскажу проблему вкратце.
Имеется приложение:
- front-end - React
- backend - Spring Boot (микросервисы)
- nginx, k8s и т.д.
Конфигурация на уровне Spring Gateway (также на стороне gateway нaстроен ssl)
spring:
cloud:
gateway:
default-filters:
- DedupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin
# CORS configuration
globalcors:
add-to-simple-url-handler-mapping: true
corsConfigurations:
'[/**]':
allowedOrigins:
- "https://example.com" # front-end URL
allow-credentials: true
allowedHeader: "*"
allowedMethods:
- "OPTIONS"
- "GET"
- "POST"
- "PUT"
- "DELETE"
- "PATCH"
Конфигурация на уровне nginx:
server {
listen 443 ssl;
ssl_certificate /srv/ssl/tls.crt;
ssl_certificate_key /srv/ssl/tls.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
add_header 'Access-Control-Allow-Origin' 'https://example.com';
}
if($request_method = 'OPTIONS') {
add_header 'Access-Control-Max-Age' 1720000;
add_header 'Content-Type' 'text_plain; charset=utf-8';
add_header 'Content-Length' 0;
return 204;
}
}
Ошибка на стороне фронта -
CORS header ‘Access-Control-Allow-Origin’ missing). Status code: 403
При проверке через Postman, если указать корректный Origin в header, то запрос проходит. Если указать другой Origin, то - 403. Т.е. в принципе, в бэке все ок. Проверил также через curl.
Насколько мне известно на стороне не нужно ничего настраивать, так как Origin отправляется автоматически. Но при этом почему-то не работает. И получаю вышеуказанную ошибку. Я сам бэкенд разработчик. И соответственно, могу проверить что-либо на своей стороне. Ну максимум на фронте. А вот, где может быть проблема на стороне конфигов сервера, даже не знаю.
Есть ли смысл настраивать что-либо на стороне фронта? Например, proxy
https://www.stackhawk.com/blog/react-cors-guide-wh...
Буду признателен за помощь или хотя бы за идеи.