上次写了一篇吐槽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方法,所以脑子直一点的可能认为是拦截器的代码出问题了