解决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 相关文章推荐
JQuery1.4+ Ajax IE8 内存泄漏问题
Oct 15 Javascript
20款非常优秀的 jQuery 工具提示插件 推荐
Jul 15 Javascript
jQuery实现响应浏览器缩放大小并改变背景颜色
Oct 31 Javascript
JavaScript中的this,call,apply使用及区别详解
Jan 29 Javascript
封装获取dom元素的简单实例
Jul 08 Javascript
Angular2内置指令NgFor和NgIf详解
Aug 03 Javascript
用jQuery实现优酷首页轮播图
Jan 09 Javascript
javascript基础练习之翻转字符串与回文
Feb 20 Javascript
微信小程序 参数传递实例代码
Mar 20 Javascript
脚手架vue-cli工程webpack的作用和特点
Sep 29 Javascript
vue获取data数据改变前后的值方法
Nov 07 Javascript
JavaScript DOM常用操作代码汇总
Jul 03 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 extract 将数组拆分成多个变量的函数
2010/06/30 PHP
深入PHP内存相关的功能特性详解
2013/06/08 PHP
PHP数据分析引擎计算余弦相似度算法示例
2017/08/08 PHP
PHP读取文件或采集时解决中文乱码
2021/03/09 PHP
js 取时间差去掉周六周日实现代码
2012/12/25 Javascript
javascript获取本机操作系统类型的方法
2015/08/13 Javascript
AngularJS2中一种button切换效果的实现方法(二)
2017/03/27 Javascript
Angular 2父子组件数据传递之局部变量获取子组件其他成员
2017/07/04 Javascript
Angular.js中上传指令ng-upload的基本使用教程
2017/07/30 Javascript
vue 打包后的文件部署到express服务器上的方法
2017/08/09 Javascript
基于Vue框架vux组件库实现上拉刷新功能
2017/11/28 Javascript
微信小程序swiper禁止用户手动滑动代码实例
2019/08/23 Javascript
深入理解redux之compose的具体应用
2020/01/12 Javascript
我所理解的JavaScript中的this指向
2020/09/04 Javascript
python使用rabbitmq实现网络爬虫示例
2014/02/20 Python
Python脚本实现集群检测和管理功能
2015/03/06 Python
Python使用爬虫猜密码
2016/02/19 Python
Python使用pylab库实现画线功能的方法详解
2017/06/08 Python
python使用Apriori算法进行关联性解析
2017/12/21 Python
python爬取指定微信公众号文章
2018/12/20 Python
Python3 单行多行万能正则匹配方法
2019/01/07 Python
面向新手解析python Beautiful Soup基本用法
2020/07/11 Python
10个很棒的 CSS3 开发工具 推荐
2011/05/16 HTML / CSS
CSS3 2D模拟实现摩天轮旋转效果
2016/11/16 HTML / CSS
Parts Express:音频、视频和扬声器的第一来源
2017/04/25 全球购物
西班牙国家航空官方网站:Iberia
2017/11/16 全球购物
德国电子产品购物网站:TechInTheBasket德国
2018/12/07 全球购物
澳大利亚个性化儿童礼品网站:Bright Star Kids
2019/06/14 全球购物
初中生自我评价
2014/02/01 职场文书
小学生开学感言
2014/02/28 职场文书
2014党委书记四风对照检查材料思想汇报
2014/09/21 职场文书
2014学习十八届四中全会精神思想汇报范文
2014/10/23 职场文书
学校群众路线专项整治方案
2014/10/31 职场文书
雷锋的故事观后感
2015/06/10 职场文书
Linux中一对多配置日志服务器的详细步骤
2022/07/23 Servers
JavaScript实现音乐播放器
2022/08/14 Javascript