解决vue axios跨域 Request Method: OPTIONS问题(预检请求)


Posted in Javascript onAugust 14, 2020

我们在vue开发中用axios进行跨域请求时有时会遇到,同一个接口请求了两次,并且第一次都是options请求,然后才是post/get请求

如下图

解决vue axios跨域 Request Method: OPTIONS问题(预检请求)

options请求

解决vue axios跨域 Request Method: OPTIONS问题(预检请求)

get请求

为什么会出现这种原因呢?

这是因为CORS跨域分为 简单跨域请求和复杂跨域请求;

简单跨域不会发送options请求,复杂跨域会发送一个预检请求options。

1.简单跨域满足的条件

1.请求方式是以下三种之一:

HEAD

GET

POST

2.HTTP的头信息不超出以下几种字段

Accept

Accept-Language

Content-Language

Last-Event-ID

Content-Type

但是Content-Type的值,只限于三个值:

application/x-www-form-urlencoded、multipart/form-data、text/plain

2.复杂跨域满足的条件

1.请求方法不是GET/HEAD/POST

2. post请求的Content-Type并非application/x-www-form-urlencoded, multipart/form-data, 或text/plain

3.请求设置了自定义的header字段

在header中自定义了字段就会触发options预检请求

// 请求拦截器
service.interceptors.request.use(
 config => {
 if (store.getters.token) {
 config.headers['Content-MD5'] = 'MD5'
 config.headers['authToken'] = getToken()
 config.headers['accessTokenRetireTime'] = getTokenTime()
 }

 return config
 },
 error => {
 console.log(error) // for debug
 return Promise.reject(error)
 }
)

3.解决方案

1.可以通过跟后端协调,将所有options放行,此时便能通过post/get请求访问到数据。

2.引入qs模块处理数据

qs.parse()将URL解析成对象的形式

qs.stringify()将对象 序列化成URL的形式,以&进行拼接

1.安装qs

npm install qs

2.在main.js引入qs

import qs from 'qs';

Vue.prototype.$qs = qs;

3.vue实例组件里都可以直接用this.$qs.stringify(要处理的数据),进行数据转换

个人倾向第一种方法,如果用第二种方法对前后端来说比较繁琐。

补充知识:vue当中axios调取后台数据 以及设置自定义请求头

从vue2.0开始vue-resource就不再维护了,尤大大开始推荐使用 axios。 具体详细教程可在官网查阅,这篇文章主要说明一些简单的问题。

第一步:安装axios

$ npm install axios

第二步:在 main.js中引入axios

解决vue axios跨域 Request Method: OPTIONS问题(预检请求)

第三步:设置我们自定义的 头请求;

header也可以在我们具体的请求中添加 header参数,我们这里是在main.js中添加公众的。

axios.defaults.timeout = 5000;

//请求超时的时间设定

axios.defaults.headers.post['Content-Type'] = 'application/json';

//axios默认的请求方式,可以自己设置

axios.defaults.baseURL = 'http://localhost:8008';

//axios默认的请求地址,开发时可以实际的接口地址来设置该值,去请求别人的接口(前提是后台已经帮你解决了接口的跨域问题,如果没有,请看下文,我们自己可以解决开发跨域的问题)

axios.defaults.headers.common["token"] = "aaaaaaaaaaa";

这块token呢是因为当初调试接口的时候 有些接口必须登录才可以调用,而我们的登陆注册并未写好,因此 后台给了一个故固定的token,然后写在了头里面。

以上这篇解决vue axios跨域 Request Method: OPTIONS问题(预检请求)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Prototype源码浅析 String部分(二)
Jan 16 Javascript
javascript中动态加载js文件多种解决办法总结
Nov 15 Javascript
JS判断、校验MAC地址的2个实例
May 05 Javascript
node.js中的http.response.setHeader方法使用说明
Dec 14 Javascript
jQuery+json实现的简易Ajax调用实例
Dec 14 Javascript
创建一个类Person的简单实例
May 17 Javascript
三分钟学会用ES7中的Async/Await进行异步编程
Jun 14 Javascript
vue .sync修饰符的使用详解
Jun 15 Javascript
vue实现后台管理权限系统及顶栏三级菜单显示功能
Jun 19 Javascript
配置node服务器并且链接微信公众号接口配置步骤详解
Jun 21 Javascript
JS数组属性去重并校验重复数据
Jan 10 Javascript
vue打开其他项目页面并传入数据详解
Nov 25 Vue.js
解决在Vue中使用axios POST请求变成OPTIONS的问题
Aug 14 #Javascript
Vue的Options用法说明
Aug 14 #Javascript
Vue 构造选项 - 进阶使用说明
Aug 14 #Javascript
vue 扩展现有组件的操作
Aug 14 #Javascript
如何HttpServletRequest文件对象并储存
Aug 14 #Javascript
解决element-ui里的下拉多选框 el-select 时,默认值不可删除问题
Aug 14 #Javascript
Vue + Element-ui的下拉框el-select获取额外参数详解
Aug 14 #Javascript
You might like
PHP利用header跳转失效的解决方法
2014/10/24 PHP
PHP7 mongoDB扩展使用的方法分享
2019/05/02 PHP
node.js学习之交互式解释器REPL详解
2016/12/08 Javascript
js记录点击某个按钮的次数-刷新次数为初始状态的实例
2017/02/15 Javascript
JavaScript数据结构之链表的实现
2017/03/19 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
2017/04/03 jQuery
微信小程序实现倒计时补零功能
2018/07/09 Javascript
微信小程序实现页面下拉刷新和上拉加载功能详解
2018/12/03 Javascript
Js代码中的span拼接问题解决
2019/11/22 Javascript
JS严格模式原理与用法实例分析
2020/04/27 Javascript
jQuery实现的分页插件完整示例
2020/05/26 jQuery
原生JavaScript实现幻灯片效果
2021/02/19 Javascript
Python实现SSH远程登陆,并执行命令的方法(分享)
2017/05/08 Python
python tkiner实现 一个小小的图片翻页功能的示例代码
2020/06/24 Python
美国彩妆品牌:Coastal Scents
2017/04/01 全球购物
FC-Moto美国:欧洲最大的摩托车服装和头盔商店之一
2019/08/24 全球购物
Gibson London官网:以地道的英国男装而著称
2019/12/06 全球购物
介绍一下Java的事务处理
2012/12/07 面试题
求职信的要素有哪些呢
2013/12/26 职场文书
开办饭店创业计划书
2013/12/28 职场文书
美德好少年主要事迹
2014/01/29 职场文书
揠苗助长教学反思
2014/02/04 职场文书
岗位廉洁从政承诺书
2014/03/27 职场文书
岗位标兵事迹材料
2014/05/17 职场文书
施工质量承诺书范文
2014/05/30 职场文书
科技活动周标语
2014/10/08 职场文书
销售员未完成销售业绩的检讨书
2014/10/12 职场文书
写给孩子的新学期寄语
2015/02/27 职场文书
三方合作意向书范本
2015/05/09 职场文书
2015年检察院个人工作总结
2015/05/20 职场文书
人与自然的观后感
2015/06/18 职场文书
外出培训学习心得体会
2016/01/18 职场文书
2016年社区创先争优活动总结
2016/04/05 职场文书
golang中的空接口使用详解
2021/03/30 Python
OpenCV-Python实现油画效果的实例
2021/06/08 Python
javascript canvas实现雨滴效果
2021/06/09 Javascript