当 axios 的请求为非简单请求时,浏览器会进行预检,即发送 OPTIONS
请求到服务器,询问是否允许跨域。如果响应中允许你的预检中请求的跨域行为,则浏览器会进行真正的请求。否则,会报 405 错误。解决办法:
设置拦截器, 把content-type 设置成application/x-www-form-urlencoded, 降级为简单请求, 就不会发送options请求。注意如果是post方法, 需要qs模块转换一下参数
return new Promise((resolve) => {
axios({
method: 'post',
url,
data: qs.stringify(param),
headers:{
'Content-Type': 'application/x-www-form-urlencoded'
},
}).then(res => {
beforeResolve(res)
resolve(res)
})
})