CORS跨域报错:为什么接口返回200,前端仍然读不到
接口返回200并不代表浏览器允许前端读取响应。本文从Origin、允许来源响应头和OPTIONS预检三个位置排查CORS错误,说明携带凭据时通配符为什么不可用。
200与允许读取是两件事
遇到CORS跨域报错,先分清服务器是否完成请求,以及浏览器是否允许脚本读取响应。网络面板显示200,只能说明那次HTTP响应的状态;缺少正确跨域响应头时,前端仍然可能拿不到内容。命令行请求成功,也不能替代真实浏览器中的跨域验证。
打开开发者工具,找到报错请求,记录页面来源与请求地址。来源由协议、主机和端口共同决定,所以http换成https、端口变化或子域名不同,都需要重新核对。先确认错误对应的是实际接口,还是它前面的OPTIONS请求。
核对允许来源与凭据
检查响应中的Access-Control-Allow-Origin是否允许当前页面来源。携带凭据的请求不能配合星号通配来源;需要返回明确允许的来源,并按业务需要配置凭据相关响应头。不要简单把收到的Origin原样反射,应该先与服务端允许列表比较。
如果服务器会根据来源动态返回这个响应头,应设置Vary: Origin,避免缓存把某个来源的响应误交给另一个来源。还要检查错误响应是否同样带有必要响应头,否则后端真正的错误可能被跨域提示遮住。
单独检查预检是否通过
浏览器在需要预检时,会先发送OPTIONS,询问目标是否允许指定方法和请求头。查看预检响应的允许方法、允许请求头及来源是否匹配,不要只检查后续POST配置。若OPTIONS被登录跳转或网关规则拦住,先修复这条路径。
修改后使用原页面、原请求方法与原凭据设置复测,并确认前端确实读到了预期数据。关闭浏览器安全检查不能作为网站修复方案。
参考资料
资料核对日期:2026年10月24日。本文为综合官方文档整理的原创排查指南,未声称进行本站故障实测。
- MDN:Access-Control-Allow-Origin
本文按照可观察的请求和日志组织诊断顺序,提供对照测试、分层定位与修复验收方法,帮助读者减少盲目修改配置,并明确说明不同运行环境的适用边界。