Java 后端面试题库 / 全部题解免费阅读理解原理,有条理地回答

跨域配置正确但仍报错,怎样排查?

先说出你的答案

定义边界、关键机制、一个反例;P8题再补容量、失败与验证。

查看完整题解

参考回答

直接回答

先看浏览器实际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 题。

这道题,你掌握得怎么样?

掌握程度由你主动标记,阅读和收藏不会自动改变状态。