axios在OPTIONS请求时无authorization认证头

原因分析

axios在进行跨域请求时,会自动先进行一次OPTIONS请求,OPTIONS获取到对应方法并通过以后,就会自动继续完成原来的请求,但是我这里完成OPTIONS以后就停止了。

检查Response的headers发现,返回的Access-Control-Allow-Headers中有Authorization,但是请求依然无法成功执行。

再检查Request的headers却发现,请求的头里面,希望匹配的却是authorization,开头字母为小写。

其实是后端用了*号来匹配头部,但是实际上它只能匹配标准的头部名称,例如Content-Type,Content-Length,Authorization, Accept等。

axios-options-problem

解决办法

修改后台服务器设置Access-Control-Allow-Headers为:,强制包含一个authorization头即可。

set_header('Access-Control-Allow-Headers', 'authorization,Authorization,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type')

修改位置有两种:

  1. 提供虚拟主机服务的配置,例如nginx
  2. 提供业务服务的后台代码,如tornado,代码如上所示。


web   axios      axios web

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!