Задать вопрос
azerphoenix
@azerphoenix
Java Software Engineer

Как устранить ошибку CORS?

Доброго времени суток, коллеги!
Расскажу проблему вкратце.
Имеется приложение:
- 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...

Буду признателен за помощь или хотя бы за идеи.
  • Вопрос задан
  • 1511 просмотров
Подписаться 1 Простой 3 комментария
Решения вопроса 1
@Wan-Derer
Зобанели на Хабре, волки́ ;((
Я у себя добавил такую конфигурацию:
/*
https://www.baeldung.com/spring-webflux-cors
https://www.baeldung.com/spring-cors
 */

package com.broadview.bvreportsgenerator.configuration;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.config.CorsRegistry;
import org.springframework.web.reactive.config.EnableWebFlux;
import org.springframework.web.reactive.config.WebFluxConfigurer;

@Configuration
@EnableWebFlux
public class CorsGlobalConfiguration implements WebFluxConfigurer {

  @Override
  public void addCorsMappings(CorsRegistry registry) {
    registry.addMapping("/**");
  }
}


Это вариант для WebFlux. Если у тебя "обычный" web, будут немного другие вызовы, см. статьи в коменте.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы