解决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 相关文章推荐
JavaScript调用后台的三种方法实例
Oct 17 Javascript
基于javascript实现判断移动终端浏览器版本信息
Dec 09 Javascript
深入浅析JavaScript中对事件的三种监听方式
Sep 29 Javascript
vue实现a标签点击高亮方法
Mar 17 Javascript
js数组去重的方法总结
Jan 18 Javascript
layer父页获取弹出层输入框里面的值方法
Sep 02 Javascript
Bootstrap实现模态框效果
Sep 30 Javascript
Vue学习之axios的使用方法实例分析
Jan 06 Javascript
js实现的订阅发布者模式简单示例
Mar 14 Javascript
vue 实现超长文本截取,悬浮框提示
Jul 29 Javascript
vue 动态组件(component :is) 和 dom元素限制(is)用法说明
Sep 04 Javascript
vue+element UI实现树形表格
Dec 29 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
sql注入与转义的php函数代码
2013/06/17 PHP
PHP COOKIE及时生效的方法介绍
2014/02/14 PHP
深入解析Laravel5.5中的包自动发现Package Auto Discovery
2017/09/13 PHP
php慢查询日志和错误日志使用详解
2021/02/27 PHP
线路分流自动跳转代码;希望对大家有用!
2006/12/02 Javascript
js 获取class的元素的方法 以及创建方法getElementsByClassName
2013/03/11 Javascript
使用javascript做的一个随机点名程序
2014/02/13 Javascript
自己用jQuery写了一个图片的马赛克消失效果
2014/05/04 Javascript
javascript单引号和双引号的区别和处理
2014/05/14 Javascript
jQuery实现仿路边灯箱广告图片轮播效果
2015/04/15 Javascript
Javascript的表单验证-初识正则表达式
2016/03/18 Javascript
获取jqGrid中选择的行的数据
2016/11/30 Javascript
jQuery实现别踩白块儿网页版小游戏
2017/01/18 Javascript
js实现多行文本框统计剩余字数功能
2017/03/28 Javascript
详解如何在Vue2中实现组件props双向绑定
2017/03/29 Javascript
使用Require.js封装原生js轮播图的实现代码
2017/06/15 Javascript
JavaScript模拟文件拖选框样式v1.0的实例
2017/08/04 Javascript
Vue2.X 通过AJAX动态更新数据
2018/07/17 Javascript
微信小程序网络封装(简单高效)
2018/08/06 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
2019/02/22 Javascript
vue项目移动端实现ip输入框问题
2019/03/19 Javascript
jquery获取并修改触发事件的DOM元素示例【基于target 属性】
2019/10/10 jQuery
p5.js临摹旋转爱心
2019/10/23 Javascript
Vue中的this.$options.data()和this.$data用法说明
2020/07/26 Javascript
[04:19]DOTA2亚洲邀请赛 现场花絮
2015/03/11 DOTA
linux系统使用python获取内存使用信息脚本分享
2014/01/15 Python
python3+PyQt5实现文档打印功能
2018/04/24 Python
如何优雅地处理Django中的favicon.ico图标详解
2018/07/05 Python
利用html5 canvas动态画饼状图的示例代码
2018/04/02 HTML / CSS
俄罗斯旅游网站:Tripadvisor俄罗斯
2017/03/21 全球购物
Unix如何在一行中运行多个命令
2015/05/29 面试题
经济学博士求职自荐信范文
2013/11/23 职场文书
致800米运动员广播稿
2014/02/16 职场文书
业务员年终工作总结2015
2015/05/28 职场文书
放假通知怎么写
2015/08/18 职场文书
优秀家长事迹材料(2016推荐版)
2016/02/29 职场文书