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 网页水印(非图片水印)实现代码
Mar 01 Javascript
使用delegate方法为一个tr标签加一个链接
Jun 27 Javascript
DOM 事件流详解
Jan 20 Javascript
基于JS2Image实现圣诞树代码
Dec 24 Javascript
JavaScript实现给定时间相加天数的方法
Jan 25 Javascript
AngularJS入门教程之AngularJS表达式
Apr 18 Javascript
JavaScript实现窗口抖动效果
Oct 19 Javascript
分享bootstrap学习笔记心得(组件及其属性)
Jan 11 Javascript
JS实现的数字格式化功能示例
Feb 10 Javascript
微信小程序页面跳转功能之从列表的item项跳转到下一个页面的方法
Nov 27 Javascript
详谈vue+webpack解决css引用图片打包后找不到资源文件的问题
Mar 06 Javascript
vue-cli 3.x 修改dist路径的方法
Sep 19 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
Yii入门教程之Yii安装及hello world
2014/11/25 PHP
php实现的XML操作(读取)封装类完整实例
2017/02/23 PHP
PHP操作XML中XPath的应用示例
2019/07/04 PHP
javascript的键盘控制事件说明
2008/04/15 Javascript
始终在屏幕中间显示Div的代码(css+js)
2011/03/10 Javascript
拖动table标题实现改变td的大小(css+js代码)
2013/04/16 Javascript
解析Jquery中如何把一段html代码动态写入到DIV中(实例说明)
2013/07/09 Javascript
js与运算符和或运算符的妙用
2014/02/14 Javascript
详解JavaScript 中的 replace 方法
2016/01/01 Javascript
JavaScript 实现的checkbox经典实例分享
2016/10/16 Javascript
浅谈angular4实际项目搭建总结
2017/12/01 Javascript
JS关于刷新页面的相关总结
2018/05/09 Javascript
使用NestJS开发Node.js应用的方法
2018/12/03 Javascript
Node.js折腾记一:读指定文件夹,输出该文件夹的文件树详解
2019/04/20 Javascript
通过javascript实现段落的收缩与展开
2019/06/26 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
2019/07/31 Javascript
微信小程序实现Swiper轮播图效果
2019/11/22 Javascript
[02:51]DOTA2 2015国际邀请赛中国区预选赛第一日战报
2015/05/27 DOTA
python实现对文件中图片生成带标签的txt文件方法
2018/04/27 Python
python-docx修改已存在的Word文档的表格的字体格式方法
2018/05/08 Python
对python创建及引用动态变量名的示例讲解
2018/11/10 Python
对python打乱数据集中X,y标签对的方法详解
2018/12/14 Python
python进行TCP端口扫描的实现
2018/12/21 Python
python实现桌面壁纸切换功能
2019/01/21 Python
python scatter函数用法实例详解
2020/02/11 Python
python实现扫雷小游戏
2020/04/24 Python
python集合能干吗
2020/07/19 Python
python 用opencv实现霍夫线变换
2020/11/27 Python
Needle & Thread官网:英国仙女品牌
2018/01/13 全球购物
土木工程毕业生推荐信
2013/10/28 职场文书
银行办理业务介绍信
2014/01/18 职场文书
摄影专业毕业生求职信
2014/03/13 职场文书
健康家庭事迹材料
2014/05/02 职场文书
2014年维修工作总结
2014/11/22 职场文书
安全教育培训制度
2015/08/06 职场文书
高二化学教学反思
2016/02/22 职场文书