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 相关文章推荐
FormValidate 表单验证功能代码更新并提供下载
Aug 23 Javascript
javascript解决innerText浏览器兼容问题思路代码
May 17 Javascript
JQuery的自定义事件代码,触发,绑定简单实例
Aug 01 Javascript
jQuery自带的一些常用方法总结
Sep 03 Javascript
js漂浮广告实现代码
Aug 15 Javascript
zTree插件下拉树使用入门教程
Apr 11 Javascript
jQuery实现的粘性滚动导航栏效果实例【附源码下载】
Oct 19 jQuery
JS非行间样式获取函数的实例代码
Jun 05 Javascript
Js和VUE实现跑马灯效果
May 25 Javascript
vue tab切换,解决echartst图表宽度只有100px的问题
Jul 19 Javascript
vue 通过base64实现图片下载功能
Dec 19 Vue.js
JS代码实现页面切换效果
Jan 10 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
一个ORACLE分页程序,挺实用的.
2006/10/09 PHP
php访问数组最后一个元素的函数end()用法
2015/03/18 PHP
php实现在服务器端调整图片大小的方法
2015/06/16 PHP
PHP输出XML格式数据的方法总结
2017/02/08 PHP
Laravel5中Cookie的使用详解
2017/05/03 PHP
mysqli扩展无法在PHP7下升级问题的解决
2019/09/10 PHP
laravel-admin表单提交隐藏一些数据,回调时获取数据的方法
2019/10/08 PHP
一些有关检查数据的JS代码
2006/09/07 Javascript
javascript 浏览器检测代码精简版
2010/03/04 Javascript
不用锚点也可以平滑滚动到页面的指定位置实现代码
2013/05/08 Javascript
jQuery探测位置的提示弹窗(toolTip box)详细解析
2013/11/14 Javascript
JS继承用法实例分析
2015/02/05 Javascript
js实现简单鼠标跟随效果的方法
2015/04/10 Javascript
JavaScript实现函数返回多个值的方法
2015/06/09 Javascript
jQuery插件pagewalkthrough实现引导页效果
2015/07/05 Javascript
JS实现的竖向折叠菜单代码
2015/10/21 Javascript
Highcharts使用简例及异步动态读取数据
2015/12/30 Javascript
vue params、query传参使用详解
2017/09/12 Javascript
Bootstrap 中data-[*] 属性的整理
2018/03/13 Javascript
浅谈mvvm-simple双向绑定简单实现
2018/04/18 Javascript
VUE2.0+ElementUI2.0表格el-table实现表头扩展el-tooltip
2018/11/30 Javascript
JS 实现发送短信验证码的“59秒后重新发送验证短信”功能
2019/08/23 Javascript
[46:27]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第一局
2016/03/02 DOTA
Python Json序列化与反序列化的示例
2018/01/31 Python
python实现一个简单的ping工具方法
2019/01/31 Python
用django-allauth实现第三方登录的示例代码
2019/06/24 Python
python定时任务 sched模块用法实例
2019/11/04 Python
英国著名的茶叶品牌:Whittard of Chelsea
2016/09/22 全球购物
纽约海:Sea New York
2018/11/04 全球购物
办护照工作证明范本
2014/01/14 职场文书
捐书寄语赠言
2014/01/18 职场文书
三八妇女节超市活动方案
2014/08/18 职场文书
研究生个人学年总结
2015/02/14 职场文书
不同意离婚代理词
2015/05/23 职场文书
教你如何使用Python下载B站视频的详细教程
2021/04/29 Python
MySQL系列之开篇 MySQL关系型数据库基础概念
2021/07/02 MySQL