axios携带cookie配置详解(axios+koa)


Posted in Javascript onDecember 28, 2018

话不多说,一个字,干!

前端配置如下:

axios.defaults.withCredentials = true; //配置为true
  
  axios.post('http://localhost:3000/tpzdz/vote/all', {
   openid: 'oJ0mVw4QrfS603gFa_uAFDADH2Uc',
   date: '2018-11-21'
  }).then(function (response) {
   console.log(response)
  })

前端配置withCredentials = true 后端的跨域也需要配置

app.use(async (ctx, next) => {
 ctx.set('Access-Control-Allow-Origin', ctx.request.header.origin);
 ctx.set('Access-Control-Allow-Credentials', true);
 await next();
});

//防止每次请求都返回Access-Control-Allow-Methods以及Access-Control-Max-Age,
//这两个响应头其实是没有必要每次都返回的,只是第一次有预检的时候返回就可以了。
app.use(async (ctx, next) => {
 if (ctx.method === 'OPTIONS') {
  ctx.set('Access-Control-Allow-Methods', 'PUT,DELETE,POST,GET');
  ctx.set('Access-Control-Max-Age', 3600 * 24);
  ctx.body = '';
 }
 await next();
});

实例展示完了,我们来讲讲都是怎么回事

withCredentials:默认情况下,跨源请求不提供凭据(cookie、HTTP认证及客户端SSL证明等)。通过将withCredentials属性设置为true,可以指定某个请求应该发送凭据。

  • 默认值为false。
  • true:在跨域请求时,会携带用户凭证
  • false:在跨域请求时,不会携带用户凭证;返回的 response 里也会忽略 cookie

当配置了 withCredentials = true时,必须在后端增加 response 头信息Access-Control-Allow-Origin,且必须指定域名,而不能指定为*!!!

那么问题就来了,若是多个域名呢?
我配置的是任意域名都可以访问,但是这样并不安全。建议做法是创建一个数组,每次去检测域名是否在数组内,存在则继续

讲到这里了,那么延伸一下 post请求下的options

options 它是一种探测性的请求,通过这个方法,客户端可以在采取具体资源请求之前,决定对该资源采取何种必要措施,或者了解服务器的性能。

前台跨域post请求,由于CORS(cross origin resource share)规范的存在,浏览器会首先发送一次options嗅探,同时header带上origin,判断是否有跨域请求权限,服务器响应access control allow origin的值,供浏览器与origin匹配,如果匹配则正式发送post请求。

每一次非简单请求都会实际上发出两次请求,一次预检一次真正请求,这就比较损失性能了。

所以就有了2图的中间件。 Access-Control-Max-Age: 86400

设置一个相对时间,在该非简单请求在服务器端通过检验的那一刻起,当流逝的时间的毫秒数不足Access-Control-Max-Age时,就不需要再进行预检,可以直接发送一次请求。

但是为什么会有两个中间件的设置呢,推荐文章 https://3water.com/article/135924.htm 很细致哦

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
ext实现完整的登录代码
Aug 08 Javascript
基于jquery实现的鼠标拖拽元素复制并写入效果
Aug 23 Javascript
JavaScript 布尔操作符解析  && || !
Aug 10 Javascript
jQuery实现带延迟的二级tab切换下拉列表效果
Sep 01 Javascript
js+canvas绘制五角星的方法
Jan 28 Javascript
bootstrap3 兼容IE8浏览器!
May 02 Javascript
详谈JS中实现种子随机数及作用
Jul 19 Javascript
使用jQuery实现一个类似GridView的编辑,更新,取消和删除的功能
Mar 15 Javascript
浅谈vue-router 路由传参的方法
Dec 27 Javascript
JQuery获取可视区尺寸和文档尺寸及制作悬浮菜单示例
May 14 jQuery
vue 获取视频时长的实例代码
Aug 20 Javascript
vue.js中ref及$refs的使用方法解析
Oct 08 Javascript
微信小程序日历/日期选择插件使用方法详解
Dec 28 #Javascript
解决echarts的多个折现数据出现坐标和值对不上的问题
Dec 28 #Javascript
微信小程序时间控件picker view使用详解
Dec 28 #Javascript
微信小程序时间选择插件使用详解
Dec 28 #Javascript
微信小程序当前时间时段选择器插件使用方法详解
Dec 28 #Javascript
Angular6新特性之Angular Material
Dec 28 #Javascript
关于微信公众号开发无法支付的问题解决
Dec 28 #Javascript
You might like
php解析json数据实例
2014/08/19 PHP
php-redis中的sort排序函数总结
2015/07/08 PHP
php生成无限栏目树
2017/03/16 PHP
php新建文件的方法实例
2019/09/26 PHP
php操作redis命令及代码实例大全
2020/11/19 PHP
JavaScript自执行闭包的小例子
2013/06/29 Javascript
jquery统计用户选中的复选框的个数
2014/06/06 Javascript
jQuery弹出框代码封装DialogHelper
2015/01/30 Javascript
jQuery实现鼠标滑过Div层背景变颜色的方法
2015/02/17 Javascript
javascript基本算法汇总
2016/03/09 Javascript
原生js实现简单的模态框示例
2017/09/08 Javascript
利用Promise自定义一个GET请求的函数示例代码
2019/03/20 Javascript
extjs4图表绘制之折线图实现方法分析
2020/03/06 Javascript
用VsCode编辑TypeScript的实现方法
2020/05/07 Javascript
webpack+vue.js构建前端工程化的详细教程
2020/05/10 Javascript
react中hook介绍以及使用教程
2020/12/11 Javascript
Python给你的头像加上圣诞帽
2018/01/04 Python
Python 使用with上下文实现计时功能
2018/03/09 Python
spark: RDD与DataFrame之间的相互转换方法
2018/06/07 Python
在python中利用numpy求解多项式以及多项式拟合的方法
2019/07/03 Python
PyTorch加载预训练模型实例(pretrained)
2020/01/17 Python
在 Pycharm 安装使用black的方法详解
2020/04/02 Python
Python学习之路安装pycharm的教程详解
2020/06/17 Python
奢华时尚的独特视角:La Garçonne
2018/06/07 全球购物
毕业生精彩的自我评价分享
2013/10/06 职场文书
日本语毕业生自荐信
2014/02/01 职场文书
军训自我鉴定200字
2014/02/13 职场文书
2014年六一儿童节演讲稿
2014/05/23 职场文书
党旗在我心中演讲稿
2014/09/15 职场文书
党员自我评价2015
2015/03/03 职场文书
2015年办公室工作总结范文
2015/03/31 职场文书
2015年电工工作总结
2015/04/10 职场文书
音乐之声观后感
2015/06/04 职场文书
升学宴学生致辞
2015/09/29 职场文书
MySQL面试题讲解之如何设置Hash索引
2021/11/01 MySQL
千万级用户系统SQL调优实战分享
2022/03/03 MySQL