Доступ был заблокирован политикой CORS, несмотря на то, что предпечатный ответ успешен. Подстановочный знак «Access-Control-Allow-Origin» существует - PullRequest
0 голосов
/ 16 января 2020

Я не являюсь разработчиком серверной логики c, но я пытаюсь взаимодействовать с ней, используя Ax ios в приложении веб-интерфейса.

У меня есть доступ к коду и его приложению SpringBoot, где я заметил, что Cors включен:

    @Override
    protected void configure(final HttpSecurity http) throws Exception {
        http.cors() ...
    }

    ...

    @Bean
    CorsConfigurationSource corsConfigurationSource() {
        final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", new CorsConfiguration().applyPermitDefaultValues());
        return source;
    }

Я также попытался установить значения заголовков самостоятельно, не вызывая applyPermitDefaultValues , Я вижу их на вкладке Chrome Браузер сети запроса кода состояния 200 OPTIONS, но консоль по-прежнему говорит:

Access to XMLHttpRequest at 'http://localhost:8080/login' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'. The credentials mode of requests initiated by the XMLHttpRequest is controlled by the withCredentials attribute.

Вот предварительный ответ:

Access-Control-Allow-Headers: authorization, content-type
Access-Control-Allow-Methods: GET,HEAD,POST,OPTIONS,DELETE,PUT
Access-Control-Allow-Origin: *
Access-Control-Max-Age: 1800
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Content-Length: 0
Date: Thu, 16 Jan 2020 17:18:25 GMT
Expires: 0
Pragma: no-cache
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block

Выполнение запроса:

Сначала создайте экземпляр Ax ios:

Axios.create({
      baseURL:
        process.env.NODE_ENV !== "development"
          ? "..."
          : "...",
      withCredentials: true,
      headers: {
        // Auth token
        Authorization
      }
    })

Затем я повторно использую этот экземпляр и вызываю this.api.post(...) или любой другой метод.

Все они терпят неудачу, даже когда возвращается шаблон, я понятия не имею, с чего начать.

Почему я все еще получаю ошибку cors.

Как мне решить эту проблему?

1 Ответ

2 голосов
/ 16 января 2020

Отсюда:

Access to XMLHttpRequest at 'http://localhost:8080/login' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'. The credentials mode of requests initiated by the XMLHttpRequest is controlled by the withCredentials attribute.

Я считаю, что источником ваших проблем является то, что атрибут запроса withCredentials имеет значение true, и в этом случае Access-Control-Allow-Origin: * нельзя использовать, даже если нет заголовка Access-Control-Allow-Credentials.

Для получения дополнительной информации о параметре withCredentials и заголовке ответа см. Эту статью: https://www.ozkary.com/2015/12/api-oauth-token-access-control-allow-credentials.html

...