Vue 的作者尤雨溪几个月前发表了一篇博客,表示 vue-resource 将不再是官方推荐的库,建议大家以 axios 替代。由此,开始了使用 axios 的历程,但是实践发现每次POST请求,都会先发送一个OPTIONS的请求,然后再发送正常的POST请求。
查了一些资料,发现这个问题,其实并不复杂。
跨域资源共享标准新增了一组 HTTP 首部字段,允许服务器声明哪些源站有权限访问哪些资源。另外,规范要求,对那些可能对服务器数据产生副作用的 HTTP 请求方法(特别是 GET 以外的 HTTP 请求,或者搭配某些 MIME 类型的 POST 请求),浏览器必须首先使用 OPTIONS 方法发起一个预检请求(preflight request),从而获知服务端是否允许该跨域请求。服务器确认允许之后,才发起实际的 HTTP 请求。在预检请求的返回中,服务器端也可以通知客户端,是否需要携带身份凭证(包括 Cookies 和 HTTP 认证相关数据)。
也就是说,它会先使用options去测试,你这个接口是否能够正常通讯,如果不能就不会发送真正的请求过来,如果测试通讯正常,则开始正常请求。
关于这个问题,需要在后台接口进行设置,允许options请求,不然你的请求就会受到影响。如果请求方式为options,告诉它可以通讯,其他直接什么都不做。
那么问题来了,怎么避免额外发送options请求的问题?
1、Vue 使用,只需要把格式为json的参数用qs插件转换一下就好了
1 | // 第一步:安装qs |