axios发送post请求会发送两次,第一次请求是options

1、问题

使用axios进行接口请求,当发送post请求时,浏览器会发送两次请求(在Network中可以看到),一次是options请求,另外一次才是正常的post请求
axios发送post请求会发送两次,第一次请求是options_第1张图片

2、原因

CORS非简单请求会先发出 method 为 options 的预检请求(这句话里面的知识点可多了,详细的解释大家可以去看一下~)

  • CORS是什么 :简单理解就是它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制,是
    ( 详细的可以看这篇文章 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS#Preflighted_requests )
  • 我用的 axios 的 post 请求为啥是非简单请求??
    axios 的 post 提交的默认请求头是Content-Type: application/json,所以不符合下面简单请求
    axios发送post请求会发送两次,第一次请求是options_第2张图片
3、解决

将axios的post请求变成简单请求,即将content-tyoe设置成 application/x-www-form-urlencoded;charset=utf-8

import Qs from 'qs'  // 先引入qs

var instance = this.$axios.create(  // 设置请求头
	{ headers: 
		{'content-type': 'application/x-www-form-urlencoded;charset=utf-8'}  
	}	
);
instance
	.post(请求地址,Qs.stringify(参数))
     .then(res => {
         console.log(res);
     })
     .catch(err => {
         console.log(err);
     });

axios的几种post请求总结 https://blog.csdn.net/Janus_lian/article/details/100525068

你可能感兴趣的:(vue)