跨域配置正确但仍报错,怎样排查?
查看完整题解
参考回答
直接回答
先看浏览器实际Origin、请求方法与凭据模式,再分清预检失败还是实际响应缺少允许头。代理、重定向与安全过滤链都可能改变路径,不能只看控制器上有CrossOrigin就认定完整链路已正确。跨域错误也可能掩盖服务端真正的401、403或异常响应。
讲清原理
检查OPTIONS是否被要求登录、允许方法与请求头是否包含实际值、凭据模式是否与服务端一致,以及错误响应是否也经过适当CORS处理。允许源应匹配浏览器看到的scheme、host和port。
同源开发代理可能让本地请求无需CORS,生产分域后才暴露问题;反过来用浏览器以外工具成功也不能证明浏览器允许读取,因为它们不执行同源策略。
例子与易错点
保留一个允许源与一个拒绝源的自动化预检测试,同时检查实际响应。不要用关闭所有认证、把凭据与任意星号混用,或把跨域当CSRF同义词来临时解决。
以下为 Java 21 类成员示例,放入同一外部类中使用,依赖 Boot4.1.2 / Framework7.0.10。预期拒绝的错误配置:allowedOrigins星号与凭据组合;不执行任何浏览器或网络访问。
static void invalidCredentialCors() {
var config=new org.springframework.web.cors.CorsConfiguration();
config.setAllowedOrigins(java.util.List.of("*"));
config.setAllowCredentials(true);
config.validateAllowCredentials();
}
相关题:第 29 题、第 30 题、第 46 题。
这道题,你掌握得怎么样?
掌握程度由你主动标记,阅读和收藏不会自动改变状态。