浏览器报 CORS 错误,但 MVC 里明明配了跨域?预检请求为什么是 401?http.cors() 到底做了什么?allowedOrigins("*") 能不能带凭据?这篇在 Spring Boot 4.0.8、Spring Security 7 上用 OPTIONS 请求逐个实测。
预检 OPTIONS /api/data(Origin https://app.example)→ HTTP 401,相关响应头 {'www-authenticate': 'Basic realm="Realm"'}
带凭据的 GET /api/data(Origin https://app.example)→ HTTP 200,相关响应头 {'vary': 'Access-Control-Request-Headers', 'access-control-allow-origin': 'https://app.example', 'access-control-allow-credentials': 'true'}
带凭据的 GET /api/data(Origin https://evil.example)→ HTTP 403 Invalid CORS request,相关响应头 {'vary': 'Access-Control-Request-Headers'}预检不带凭据,在认证这一关就被拦下,没有 CORS 头;真实请求带凭据时却是通的。
预检(允许的 Origin)→ HTTP 200,相关响应头 {'vary': 'Access-Control-Request-Headers', 'access-control-allow-origin': 'https://app.example', 'access-control-allow-methods': 'GET,POST,PUT', 'access-control-allow-headers': 'content-type, x-token', 'access-control-allow-credentials': 'true', 'access-control-max-age': '1800'}
预检(不在允许列表里的 Origin https://evil.example)→ HTTP 403 Invalid CORS request,相关响应头 {'vary': 'Access-Control-Request-Headers'}
预检(请求方法 DELETE 不在允许列表里)→ HTTP 403 Invalid CORS request
预检(请求头 x-other 不在允许列表里)→ HTTP 403 Invalid CORS request
带凭据的 GET → HTTP 200,相关响应头 {'vary': 'Access-Control-Request-Headers', 'access-control-allow-origin': 'https://app.example', 'access-control-allow-credentials': 'true'}CorsFilter 排在认证之前,复用 MVC 的 CORS 规则;不允许的 Origin、方法、请求头预检 403。
setAllowedOrigins(["*"]) + setAllowCredentials(true):应用启动成功
但预检请求 → HTTP 401 ,相关响应头 {'vary': 'Access-Control-Request-Headers', 'www-authenticate': 'Basic realm="Realm"'}
服务端日志:(无)
setAllowedOriginPatterns(["https://*.example"]) + allowCredentials(true):预检 Origin https://shop.example → HTTP 200,相关响应头 {'vary': 'Access-Control-Request-Headers', 'access-control-allow-origin': 'https://shop.example', 'access-control-allow-methods': 'GET,POST', 'access-control-allow-headers': 'content-type, x-token', 'access-control-allow-credentials': 'true'}
预检 Origin https://shop.other → HTTP 403 Invalid CORS requestbean 名要叫 corsConfigurationSource;带凭据用 allowedOriginPatterns。