解决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类 from qq
Nov 13 Javascript
根据地区不同显示时间的javascript代码
Aug 13 Javascript
jquery弹出框的用法示例(2)
Aug 26 Javascript
让html页面不缓存js的实现方法
Oct 31 Javascript
ECMAScript6新增值比较函数Object.is
Jun 12 Javascript
jquery实现Slide Out Navigation滑出式菜单效果代码
Sep 07 Javascript
详解AngularJS中的表单验证(推荐)
Nov 17 Javascript
利用Plupload.js解决大文件上传问题, 带进度条和背景遮罩层
Mar 15 Javascript
浅谈webpack 构建性能优化策略小结
Jun 13 Javascript
微信小程序实现跑马灯效果
Oct 21 Javascript
JS实现的A*寻路算法详解
Dec 14 Javascript
vue新建项目并配置标准路由过程解析
Dec 09 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
让你同时上传 1000 个文件 (一)
2006/10/09 PHP
php include,include_once,require,require_once
2008/09/05 PHP
PHP Global定义全局变量使用说明
2013/08/15 PHP
Laravel框架学习笔记(二)项目实战之模型(Models)
2014/10/15 PHP
php实现遍历目录并删除指定文件中指定内容
2015/01/21 PHP
PHP实现的迷你漂流瓶
2015/07/29 PHP
PHP实现的简单组词算法示例
2018/04/10 PHP
js 目录列举函数
2008/11/06 Javascript
javascript tips提示框组件实现代码
2010/11/19 Javascript
关于window.pageYOffset和document.documentElement.scrollTop
2011/04/05 Javascript
jquery $("#variable") 循环改变variable的值示例
2014/02/23 Javascript
JS将光标聚焦在文本最后的实现代码
2014/03/28 Javascript
ext前台接收action传过来的json数据示例
2014/06/17 Javascript
JQuery 在线引用及测试引用是否成功
2014/06/24 Javascript
谈一谈jQuery核心架构设计
2016/03/28 Javascript
Angular页面间切换及传值的4种方法
2016/11/04 Javascript
Bootstrap表格使用方法详解
2017/02/17 Javascript
webpack 最佳配置指北(推荐)
2020/01/07 Javascript
浅析Python中yield关键词的作用与用法
2016/11/29 Python
Python探索之爬取电商售卖信息代码示例
2017/10/27 Python
Python常见工厂函数用法示例
2018/03/21 Python
在Python中使用gRPC的方法示例
2018/08/08 Python
python mac下安装虚拟环境的图文教程
2019/04/12 Python
Python实现一个论文下载器的过程
2021/01/18 Python
中国京东和泰国中央集团合资的网站:JD CENTRAL
2020/08/22 全球购物
一个J2EE项目团队的主要人员组成是什么
2012/06/04 面试题
多媒体编辑专业毕业生推荐信
2013/11/05 职场文书
物流管理专业毕业生自荐信
2014/03/04 职场文书
毕业生就业意向书
2014/04/01 职场文书
会计学专业自荐信
2014/06/25 职场文书
护士自荐信怎么写
2015/03/06 职场文书
Python 游戏大作炫酷机甲闯关游戏爆肝数千行代码实现案例进阶
2021/10/16 Python
Python中super().__init__()测试以及理解
2021/12/06 Python
win11系统中dhcp服务异常什么意思? Win11 DHCP服务异常修复方法
2022/04/08 数码科技
使用Mysql计算地址的经纬度距离和实时位置信息
2022/04/29 MySQL
CentOS7 minimal 最小化安装网络设置过程
2022/12/24 Servers