解决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版本A*寻路算法
Dec 22 Javascript
关于 文本框默认值 的操作js代码
Jan 12 Javascript
对于this和$(this)的个人理解
Sep 08 Javascript
简单的Jquery遮罩层代码实例
Nov 14 Javascript
js实现刷新iframe的方法汇总
Apr 27 Javascript
js全选按钮的实现方法
Nov 17 Javascript
由简入繁实现Jquery树状结构的方法(推荐)
Jun 10 Javascript
浅谈JavaScript中的分支结构
Jul 01 Javascript
jquery层级选择器的实现(匹配后代元素div)
Sep 05 Javascript
jQuery与js实现颜色渐变的方法
Dec 30 Javascript
jQuery ajax实现省市县三级联动
Mar 07 Javascript
js实现选项卡效果
Mar 07 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
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
2010/05/04 PHP
PHP 异步执行方法,模拟多线程的应用分析
2013/06/03 PHP
PHP5.3安装Zend Guard Loader图文教程
2014/09/29 PHP
PHP之图片上传类实例代码(加了缩略图)
2016/06/30 PHP
Laravel框架查询构造器 CURD操作示例
2019/09/04 PHP
js对象之JS入门之Array对象操作小结
2011/01/09 Javascript
13 个JavaScript 性能提升技巧分享
2012/07/26 Javascript
javascript里模拟sleep(两种实现方式)
2013/01/25 Javascript
jquery等待效果示例
2014/05/01 Javascript
jQuery判断元素是否存在的可靠方法
2014/05/06 Javascript
cocos2dx骨骼动画Armature源码剖析(三)
2015/09/08 Javascript
NodeJS的Promise的用法解析
2016/05/05 NodeJs
js鼠标移动时禁止选中文字
2017/02/19 Javascript
js实现图片旋转 js滚动鼠标中间对图片放大缩小
2017/07/05 Javascript
javascript+html5+css3自定义弹出窗口效果
2017/10/26 Javascript
在一个页面实现两个zTree联动的方法
2017/12/20 Javascript
详解微信小程序input标签正则初体验
2018/08/18 Javascript
微信小程序页面渲染实现方法
2019/11/06 Javascript
深入了解JS之作用域和闭包
2020/06/16 Javascript
[01:32]DOTA2上海特锦赛现场采访:最想COS的英雄
2016/03/25 DOTA
Python中使用Beautiful Soup库的超详细教程
2015/04/30 Python
CentOS 7下Python 2.7升级至Python3.6.1的实战教程
2017/07/06 Python
利用Python爬取微博数据生成词云图片实例代码
2017/08/31 Python
APIStar:一个专为Python3设计的API框架
2018/09/26 Python
详解pandas的外部数据导入与常用方法
2019/05/01 Python
对pyqt5中QTabWidget的相关操作详解
2019/06/21 Python
Python操作MongoDb数据库流程详解
2020/03/05 Python
python怎么删除缓存文件
2020/07/19 Python
python 多线程爬取壁纸网站的示例
2021/02/20 Python
北京泡泡网网络有限公司.net面试题
2012/07/17 面试题
Python面试题集
2012/03/08 面试题
行政人事经理职位说明书
2014/03/05 职场文书
经典洗发水广告词
2014/03/13 职场文书
综合内勤岗位职责
2014/04/14 职场文书
基层党员对照检查材料
2014/08/25 职场文书
基于tensorflow权重文件的解读
2021/05/26 Python