解决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 相关文章推荐
Js从头学起(基本数据类型和引用类型的参数传递详细分析)
Feb 16 Javascript
js 模式窗口(模式对话框和非模式对话框)的使用介绍
Jul 17 Javascript
js实现的二级横向菜单条实例
Aug 22 Javascript
jquery实现漂亮的二级下拉菜单代码
Aug 26 Javascript
jQuery Ajax 全局调用封装实例代码详解
Jun 02 Javascript
实例讲解JavaScript中的this指向错误解决方法
Jun 13 Javascript
js仿淘宝评价评分功能
Feb 28 Javascript
浅谈vuex 闲置状态重置方案
Jan 04 Javascript
基于vue中解决v-for使用报红并出现警告的问题
Mar 03 Javascript
微信小程序文章列表功能完整实例
Jun 03 Javascript
谈谈JavaScript中的垃圾回收机制
Sep 17 Javascript
解决vue elementUI 使用el-select 时 change事件的触发问题
Nov 17 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递归实现无限分类生成下拉列表的函数
2010/08/08 PHP
AJAX的跨域访问-两种有效的解决方法介绍
2013/06/22 PHP
解析centos中Apache、php、mysql 默认安装路径
2013/06/25 PHP
实现获取http内容的php函数分享
2014/02/16 PHP
ThinkPHP5 验证器的具体使用
2018/05/31 PHP
Javascript:为input设置readOnly属性(示例讲解)
2013/12/25 Javascript
js拼接html注意问题示例探讨
2014/07/14 Javascript
JS动态显示表格上下frame的方法
2015/03/31 Javascript
招聘网站基于jQuery实现自动刷新简历
2015/05/10 Javascript
JS模拟酷狗音乐播放器收缩折叠关闭效果代码
2015/10/29 Javascript
js实现图片轮播效果
2015/12/19 Javascript
jQuery增加与删除table列的方法
2016/03/01 Javascript
JS实现点击登录弹出窗口同时背景色渐变动画效果
2016/03/25 Javascript
浅谈toLowerCase和toLocaleLowerCase的区别
2016/08/15 Javascript
jQuery实现删除li节点的方法
2016/12/06 Javascript
Vue中多个元素、组件的过渡及列表过渡的方法示例
2019/02/13 Javascript
基于JavaScript实现猜数字游戏代码实例
2020/07/30 Javascript
[01:04]DOTA2:伟大的Roshan雕塑震撼来临
2015/01/30 DOTA
Python实现的几个常用排序算法实例
2014/06/16 Python
Python对列表去重的多种方法(四种方法)
2017/12/05 Python
python2.7和NLTK安装详细教程
2018/09/19 Python
python远程连接MySQL数据库
2019/04/19 Python
使用Python中的reduce()函数求积的实例
2019/06/28 Python
用vue.js组件模拟v-model指令实例方法
2019/07/05 Python
python+rsync精确同步指定格式文件
2019/08/29 Python
欧洲最大的品牌水上运动服装和设备在线零售商:Wuituit Outlet
2018/05/05 全球购物
Foot Locker德国官方网站:美国运动服和鞋类零售商
2018/11/01 全球购物
实习生的自我评价
2014/01/08 职场文书
高中政治教学反思
2014/01/18 职场文书
2014年公司植树节活动方案
2014/03/04 职场文书
文化活动实施方案
2014/03/28 职场文书
初中班主任寄语
2014/04/04 职场文书
经典禁毒标语
2014/06/16 职场文书
医学专业毕业生推荐信
2014/07/12 职场文书
同志主要表现材料
2014/08/21 职场文书
CSS3 菱形拼图实现只旋转div 背景图片不旋转功能
2021/03/30 HTML / CSS