解决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 相关文章推荐
jQuery布局插件UI Layout简介及使用方法
Apr 03 Javascript
用jQuery实现一些导航条切换,显示隐藏的实例代码
Jun 08 Javascript
JavaScript立即执行函数的三种不同写法
Sep 05 Javascript
网页中JS函数自动执行常用三种方法
Mar 30 Javascript
jQuery替换节点用法示例(使用replaceWith方法)
Sep 08 Javascript
Form表单按回车自动提交表单的实现方法
Nov 18 Javascript
Vue.js列表渲染绑定jQuery插件的正确姿势
Jun 29 jQuery
详解AngularJS1.x学习directive 中‘& ’‘=’ ‘@’符号的区别使用
Aug 23 Javascript
ES6/JavaScript使用技巧分享
Dec 14 Javascript
WebSocket的通信过程与实现方法详解
Apr 29 Javascript
基于jQuery.i18n实现web前端的国际化
May 04 jQuery
详解vuejs中执行npm run dev出现页面cannot GET/问题
Apr 26 Javascript
解决在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中截取字符串支持utf-8
2007/01/18 PHP
PHP中date与gmdate的区别及默认时区设置
2014/05/12 PHP
php报错502badgateway解决方法
2019/10/11 PHP
一段利用WSH获取登录时间的jscript代码
2008/05/11 Javascript
JavaScript 学习笔记(十一)
2010/01/19 Javascript
jQuery 性能优化手册 推荐
2010/02/23 Javascript
safari,opera嵌入iframe页面cookie读取问题解决方法
2010/06/23 Javascript
javascript正则表达式中参数g(全局)的作用
2010/11/11 Javascript
Moment.js 不容错过的超棒Javascript日期处理类库
2012/04/15 Javascript
js获得指定控件输入光标的坐标兼容IE,Chrome,火狐等多种主流浏览器
2013/05/21 Javascript
基于Bootstrap实现tab标签切换效果
2020/04/15 Javascript
jQuery获取剪贴板内容的方法
2016/06/16 Javascript
Summernote实现图片上传功能的简单方法
2016/07/11 Javascript
jQuery查找节点方法完整实例
2016/09/13 Javascript
详解node.js平台下Express的session与cookie模块包的配置
2017/04/26 Javascript
BootStrap modal实现拖拽功能
2018/12/01 Javascript
[58:32]EG vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python实现全局变量的两个解决方法
2014/07/03 Python
Python使用cx_Oracle模块将oracle中数据导出到csv文件的方法
2015/05/16 Python
Python 中 Virtualenv 和 pip 的简单用法详解
2017/08/18 Python
Python补齐字符串长度的实例
2018/11/15 Python
python生成器与迭代器详解
2019/01/01 Python
Django实现auth模块下的登录注册与注销功能
2019/10/10 Python
Asics日本官网:鬼冢八喜郎创立的跑鞋运动品牌
2017/10/18 全球购物
市场营销专业毕业生自荐信
2013/11/02 职场文书
甲方资料员岗位职责
2013/12/13 职场文书
kfc实习自我鉴定
2013/12/14 职场文书
机关门卫岗位职责
2013/12/30 职场文书
工艺工程师岗位职责
2014/03/04 职场文书
初中生期末评语大全
2014/04/24 职场文书
求职信范文大全
2014/05/26 职场文书
教师四风问题对照检查材料
2014/09/26 职场文书
2014年人事工作总结范文
2014/11/19 职场文书
《折线统计图》教学反思
2016/02/22 职场文书
Mysql基础知识点汇总
2021/05/26 MySQL
JavaScript实现登录窗体
2021/06/22 Javascript