跨域请求第二个请求尚未发送出去

时间:2018-07-24 07:43:33

标签: spring cors

我将项目中的spring框架从3.1升级到4.2,我遇到了问题, 升级之前的跨域配置在nginx内有效,然后升级到4.2跨域请求将返回“ 403 Invalid CORS request”。通过查看源,发现DefaultCorsProcessor将确定是否配置了corsconfiguration,如果未配置corsconfiguration和一个预请求,它将返回403。

@Override
public boolean processRequest(CorsConfiguration config, HttpServletRequest request, HttpServletResponse response)
        throws IOException {

    if (!CorsUtils.isCorsRequest(request)) {
        return true;
    }

    ServletServerHttpResponse serverResponse = new ServletServerHttpResponse(response);
    ServletServerHttpRequest serverRequest = new ServletServerHttpRequest(request);

    if (WebUtils.isSameOrigin(serverRequest)) {
        logger.debug("Skip CORS processing, request is a same-origin one");
        return true;
    }
    if (responseHasCors(serverResponse)) {
        logger.debug("Skip CORS processing, response already contains \"Access-Control-Allow-Origin\" header");
        return true;
    }

    boolean preFlightRequest = CorsUtils.isPreFlightRequest(request);
    if (config == null) {
        if (preFlightRequest) {
            rejectRequest(serverResponse);
            return false;
        }
        else {
            return true;
        }
    }

    return handleInternal(serverRequest, serverResponse, config, preFlightRequest);
}

所以我将以下配置添加到WebMvcConfigurerAdapter。

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

让我感到困惑的是,跨域请求的请求在捕获过程中被200返回,但是第二个请求丢失了。 以下是通过Fiddler以及在通过DefaultCorsProcessor处理后获取正常请求的请求。 enter image description here

enter image description here

所以我想问一个问题,为什么浏览器不发送第二个请求,因为浏览器发送的预请求已成功返回200。

0 个答案:

没有答案