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 相关文章推荐
JAVASCRIPT对象及属性
Feb 13 Javascript
基于mootools 1.3框架下的图片滑动效果代码
Apr 22 Javascript
jquery如何获取复选框的值
Dec 12 Javascript
获取select元素被选中的文本内容的js代码
Jan 29 Javascript
js实现连个数字相加而不是拼接的方法
Feb 23 Javascript
用循环或if语句从json中取数据示例
Aug 18 Javascript
js replace(a,b)之替换字符串中所有指定字符的方法
Aug 17 Javascript
JS查找英文文章中出现频率最高的单词
Mar 20 Javascript
Vue路由跳转问题记录详解
Jun 15 Javascript
基于js的变量提升和函数提升(详解)
Sep 17 Javascript
微信小程序实现动态列表项的顺序加载动画
Jul 25 Javascript
json字符串对象转换代码实例
Sep 28 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
动漫定律:眯眯眼都是怪物!这些角色狠话不多~
2020/03/03 日漫
无刷新动态加载数据 滚动条加载适合评论等页面
2013/10/16 PHP
简单分析ucenter 会员同步登录通信原理
2014/08/25 PHP
PHP简单获取视频预览图的方法
2015/03/12 PHP
PHP 年月日的三级联动实例代码
2017/05/24 PHP
jQuery教程 $()包装函数来实现数组元素分页效果
2013/08/13 Javascript
js控制frameSet示例
2013/09/10 Javascript
replace()方法查找字符使用示例
2013/10/28 Javascript
jQuery+CSS3实现树叶飘落特效
2015/02/01 Javascript
浅谈JavaScript中的Math.atan()方法的使用
2015/06/14 Javascript
Ajax请求时无法重定向的问题解决代码详解
2019/06/21 Javascript
JS防抖和节流实例解析
2019/09/24 Javascript
Node.js 深度调试方法解析
2020/07/28 Javascript
vue 实现把路由单独分离出来
2020/08/13 Javascript
微信小程序wx.getUserInfo授权获取用户信息(头像、昵称)的实现
2020/08/19 Javascript
JavaScript经典案例之简易计算器
2020/08/24 Javascript
Python标准异常和异常处理详解
2015/02/02 Python
Python 字典与字符串的互转实例
2017/01/13 Python
详解python调度框架APScheduler使用
2017/03/28 Python
社区版pycharm创建django项目的方法(pycharm的newproject左侧没有项目选项)
2020/09/23 Python
Python实现定时监测网站运行状态的示例代码
2020/09/30 Python
TripAdvisor德国:全球领先的旅游网站
2017/12/07 全球购物
Pamela Love官网:纽约设计师Pamela Love的精美、时尚和穿孔珠宝
2020/10/19 全球购物
公司道歉信范文
2014/01/09 职场文书
企业安全生产承诺书
2014/05/22 职场文书
施工安全责任书范本
2014/07/24 职场文书
个人遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
素质教育培训心得体会
2016/01/19 职场文书
高中语文教材(文学文化常识大全一)
2019/08/13 职场文书
Axios取消重复请求的方法实例详解
2021/06/15 Javascript
centos8安装nginx1.9.1的详细过程
2021/08/02 Servers
MySQL 用 limit 为什么会影响性能
2021/09/15 MySQL
nginx负载功能+nfs服务器功能解析
2022/02/28 Servers
SQL Server表分区降低运维和维护成本
2022/04/08 SQL Server
golang用type-switch判断interface的实际存储类型
2022/04/14 Golang
pytest实现多进程与多线程运行超好用的插件
2022/07/15 Python