CORS跨域问题服务端的一个解决方法

本文详细记录了在遇到CORS跨域问题时,由于预检请求(OPTIONS)不携带参数和cookie导致服务端返回403错误,进而前端显示405错误的排查过程。解决方案是在全局拦截器中对OPTIONS请求进行特殊处理,返回带有CORS支持的200响应。
摘要由CSDN通过智能技术生成

上次写了一篇吐槽CORS的博客之后,今天再次出现此类问题。虽然对CORS已经了解的比较透彻,但这次的问题是一系列连锁问题引起的,最终对外表现为与一个不相关的错误,比较有迷惑性,所以有必要记录下来。

 

1.错误表现

先贴前端的报错异常:

OPTIONS http://foo.com/test 405 (Method Not Allowed)
Failed to load http://foo.com/test: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://originfoo.com' is therefore not allowed access.

这是服务端不支持CORS跨域的典型错误,导致接下来的真实请求被拦截了,而从预检请求的响应上看,也是服务端没有提供CORS支持,下面是OPTIONS请求的响应:

返回的支持的方法里只有GET和POST。

 

2.错误排查

首先需要声明的是,我们的系统本来有一个全局拦截器为所有请求设置CORS跨域头部,但这个预检请求收到的响应,Allow-Methods里面仍然没有OPTIONS方法,所以脑子直一点的可能认为是拦截器的代码出问题了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值