解决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对象的三个方法小结
Jan 12 Javascript
50款非常棒的 jQuery 插件分享
Mar 29 Javascript
全面解析Bootstrap布局组件应用
Feb 22 Javascript
基于Echarts 3.19 制作常用的图形(非静态)
May 19 Javascript
jQuery实现鼠标经过像翻页和描点链接效果
Aug 08 Javascript
jQuery图片轮播(二)利用构造函数和原型创建对象以实现继承
Dec 06 Javascript
js仿微信语音播放实现思路
Dec 12 Javascript
原生js开发的日历插件
Feb 04 Javascript
Vue Ajax跨域请求实例详解
Jun 20 Javascript
解决vue 按钮多次点击重复提交数据问题
May 10 Javascript
使用原生js编写一个简单的框选功能方法
May 13 Javascript
如何在vue-cli中使用css-loader实现css module
Jan 07 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
站长助手-网站web在线管理程序 v1.0 下载
2007/05/12 PHP
精美漂亮的php分页类代码
2013/04/02 PHP
php检测用户是否用手机(Mobile)访问网站的类
2014/01/09 PHP
yii上传文件或图片实例
2014/04/01 PHP
php自定义apk安装包实例
2014/10/20 PHP
php抽象类使用要点与注意事项分析
2015/02/09 PHP
PHP实现获取文件后缀名的几种常用方法
2015/08/08 PHP
PHP的几个常用加密函数
2016/02/03 PHP
php图像验证码生成代码
2017/06/08 PHP
php实现微信支付之企业付款
2018/05/30 PHP
filemanage功能中用到的lib.js
2007/04/08 Javascript
javascript日期转换 时间戳转日期格式
2011/11/05 Javascript
js+xml生成级联下拉框代码
2012/07/24 Javascript
用javascript模仿ie的自动完成类似自动完成功的表单
2012/12/12 Javascript
一个JavaScript防止表单重复提交的实例
2014/10/21 Javascript
Angularjs在初始化未完毕时出现闪烁问题的解决方法分析
2016/08/05 Javascript
JS 实现可停顿的垂直滚动实例代码
2016/11/23 Javascript
浅谈AngularJS中使用$resource(已更新)
2017/09/14 Javascript
react-navigation之动态修改title的内容
2018/09/26 Javascript
vue通过cookie获取用户登录信息的思路详解
2018/10/30 Javascript
解决vue.js中settimeout遇到的问题(时间参数短效果不稳定)
2020/07/21 Javascript
nuxt.js添加环境变量,区分项目打包环境操作
2020/11/06 Javascript
Python魔法方法功能与用法简介
2019/04/04 Python
python 命令行传入参数实现解析
2019/08/30 Python
python的faker库用法
2019/11/28 Python
Python urlencode和unquote函数使用实例解析
2020/03/31 Python
利用python绘制数据曲线图的实现
2020/04/09 Python
如何在Canvas中添加事件的方法示例
2019/05/21 HTML / CSS
Myprotein蛋白粉美国官网:欧洲畅销运动营养品牌
2016/11/15 全球购物
北京SQL新华信咨询
2016/09/30 面试题
大学生毕业鉴定
2014/01/31 职场文书
群教班子对照检查材料
2014/08/26 职场文书
2014乡镇党委副书记对照检查材料思想汇报
2014/10/09 职场文书
2016年10月份红领巾广播稿
2015/12/21 职场文书
Python Pandas模块实现数据的统计分析的方法
2021/06/24 Python
Ruby处理CSV数据方法详解
2022/04/18 Ruby