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 相关文章推荐
BOM与DOM的区别分析
Oct 26 Javascript
JavaScript判断密码强度(自写代码)
Sep 06 Javascript
JS替换文本域内的回车示例
Feb 18 Javascript
iframe调用父页面函数示例详解
Jul 17 Javascript
Javascript快速排序算法详解
Dec 03 Javascript
node.js中的fs.lchownSync方法使用说明
Dec 16 Javascript
jQuery1.9.1源码分析系列(十六)ajax之ajax框架
Dec 04 Javascript
深入浅析JavaScript中的scrollTop
Jul 11 Javascript
微信小程序实现顶部普通选项卡效果(非swiper)
Jun 19 Javascript
深入掌握 react的 setState的工作机制
Sep 27 Javascript
详解Webstorm 新建.vue文件支持高亮vue语法和es6语法
Oct 26 Javascript
javascript中的with语句学习笔记及用法
Feb 17 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循环获取GET和POST值的代码
2008/04/09 PHP
在smarty模板中使用PHP函数的方法
2011/04/23 PHP
php设计模式之委托模式
2016/02/13 PHP
PHP+Ajax+JS实现多图上传
2016/05/07 PHP
phpcms配置列表页以及获得文章发布时间
2017/07/04 PHP
jquery iframe操作详细解析
2013/11/20 Javascript
怎么判断js脚本加载完成
2014/02/28 Javascript
js QQ客服悬浮效果实现代码
2014/12/12 Javascript
微信小程序 两种滑动方式(横向滑动,竖向滑动)详细及实例代码
2017/01/13 Javascript
Node连接mysql数据库方法介绍
2017/02/07 Javascript
微信小程序movable view移动图片和双指缩放实例代码
2017/08/08 Javascript
Layui table 组件的使用之初始化加载数据、数据刷新表格、传参数
2017/09/11 Javascript
vue实现页面加载动画效果
2017/09/19 Javascript
浅谈Vuex的状态管理(全家桶)
2017/11/04 Javascript
vue.js element-ui validate中代码不执行问题解决方法
2017/12/18 Javascript
vue.js与后台数据交互的实例讲解
2018/08/08 Javascript
layui实现tab的添加拒绝重复的方法
2019/09/04 Javascript
微信小程序激励式视频广告组件使用详解
2019/12/06 Javascript
利用Python自动监控网站并发送邮件告警的方法
2016/08/24 Python
Python常见异常分类与处理方法
2017/06/04 Python
对python中矩阵相加函数sum()的使用详解
2019/01/28 Python
python函数定义和调用过程详解
2020/02/09 Python
Melijoe英国官网:法国儿童时尚网站
2016/11/18 全球购物
美国知名日用品连锁超市:Dollar General(多来店)
2017/01/14 全球购物
Lookfantastic德国官网:英国知名美妆购物网站
2017/06/11 全球购物
老板电器官方购物商城:老板油烟机、燃气灶、消毒柜、电烤箱
2018/05/30 全球购物
STUBHUB日本:购买和出售全球活动门票
2018/07/01 全球购物
高中美术教学反思
2014/01/19 职场文书
战略合作意向书范本
2014/04/01 职场文书
2014年“世界无车日”活动方案
2014/09/21 职场文书
先进党支部事迹材料
2014/12/24 职场文书
2015年乡镇工作总结范文
2015/04/22 职场文书
节约用电倡议书
2015/04/28 职场文书
小程序后台PHP版本部署运行 LNMP+WNMP
2021/04/01 Servers
python库sklearn常用操作
2021/08/23 Python
Java 异步任务计算FutureTask
2022/04/28 Java/Android