后端为何需配置CORS?SpringBoot中@CrossOrigin注解相关疑问
虽然CORS的最终校验由浏览器完成,但后端服务器必须参与其中,核心原因有这几点:
浏览器的CORS校验完全依赖后端的响应头
浏览器发起跨域请求后,会检查后端返回的Access-Control-*系列响应头(比如Access-Control-Allow-Origin)。如果后端没返回这些头,或者头里的规则和当前请求不匹配,浏览器会直接拦截响应,不让前端代码获取数据。SpringBoot的@CrossOrigin注解本质就是帮后端自动生成并返回这些合规的响应头。必须处理浏览器的预检请求
对于非简单跨域请求(比如使用PUT/DELETE方法、携带自定义请求头的情况),浏览器会先发送一个OPTIONS类型的预检请求,提前询问后端:「我接下来要发的这个跨域请求,你允许吗?」。后端需要正确响应这个预检请求,返回允许的源、请求方法、请求头等信息,否则浏览器会直接取消后续的实际请求。@CrossOrigin会自动帮后端处理OPTIONS请求的响应逻辑。CORS的核心是服务器端的安全授权
CORS机制的本质是服务器主动控制哪些外部源可以访问自己的接口,浏览器只是执行这个规则的「执行者」。如果后端不参与,浏览器就没有判断依据,无法实现有效的跨域安全限制——毕竟不能只靠浏览器的客户端校验,恶意请求可以绕过浏览器直接调用接口,后端的授权规则才是安全的关键。
举个实际例子:当你在SpringBoot接口上添加@CrossOrigin(origins = "http://localhost:9000"),后端会在响应中自动添加Access-Control-Allow-Origin: http://localhost:9000头,浏览器看到这个头后,确认请求源符合规则,才会把响应数据交给前端代码。
内容的提问来源于stack exchange,提问作者Kevin4720

