kong - cors插件 问题排查与解决
最近遇到一个问题,使用kong网关时,当我们在路由route上配置了插件跨域cors和认证key-auth插件之后,通过ajax模拟跨域方式请求时,需要在header中携带 apikey : 123456 时,一直无法访问成功,仍旧显示跨域的错误信息!
问题排查
1、首先认为是cors插件在接收时优先级高于key-auth插件,故而设置headers和exposed_headers的值,如下图:
然而经过测试,仍旧无效!
2、经过不断的尝试,起初,我只使用了google浏览器进行测试,后来,使用Safari浏览器进行了尝试,未进行任何设置如下:
这里,在safari浏览器中有个非常牛皮的设置,直接解决跨域的问题,当然,这种方式不可取!在【开发】下拉项中选中【停用跨源限制】,这样就可以解决上述的问题,当然重复一次:不可取!!!
这时,有个奇怪的玩意露出马脚了~ 我们在safari的控制台下的【资源】栏发现了端倪!请注意看下图:
注意看红色框中的内容:请求方式为OPTIONS? 并且还未请求到数据:404!!!原来,他在正式访问接口之前,进行了一次OPTIONS预检请求(推荐阅读:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS)!然而,我们的接口并没有定义OPTIONS的请求方式啊,所以访问404了,预检请求失败,后续也就无法继续请求了!!!
问题解决
那现在来解决这个OPTIONS请求,我们给接口添加上OPTIONS请求方式:
同时,将新的设置更新至kong中!这时,我们再去调用ajax请求,结果成功!!!Amazing~