使用Ajax发起跨域请求仍触发CORS policy错误,该如何解决?
问题原因
- Access-Control-Allow-Origin 属于HTTP响应头,由服务端返回时才生效,你在前端Ajax请求的请求头中添加该字段属于错误用法,反而会导致请求被判定为非简单请求触发OPTIONS预检,只要服务端未适配预检规则就会直接被CORS策略拦截。
- CORS的校验逻辑由浏览器强制执行,权限完全归属服务端,前端单方面修改请求配置无法绕过同源策略限制,必须由服务端返回符合要求的CORS响应头才能正常发起跨域请求。
- 当前请求设置的
Content-Type: application/json不属于简单请求允许的Content-Type范围,本身就会触发预检请求,若服务端未处理OPTIONS类型的请求,也会直接触发CORS报错。
修复方案
- 先删除前端请求头中错误添加的
Access-Control-Allow-Origin字段,该字段不需要前端携带。 - 联系服务端开发人员配置CORS规则,要求服务端针对该接口的请求(含OPTIONS预检请求)返回以下响应头:
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, OPTIONS
Access-Control-Allow-Headers: Content-Type, accept
同时服务端需要对OPTIONS预检请求直接返回200/204状态码,不要做鉴权等业务逻辑拦截。如果需要更高的安全性,可将Access-Control-Allow-Origin的值替换为你前端站点的实际域名,而非使用通配符。 - 若仅为本地调试使用,可临时使用浏览器跨域插件绕过CORS限制,或配置前端开发服务的代理能力(如Webpack的devServer.proxy、Vite的server.proxy)转发请求,该类方案仅适用于本地开发场景,生产环境仍需服务端配置CORS规则。
内容的提问来源于stack exchange,提问作者Ayman Barhoum
相关产品推荐
相关产品推荐

