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 相关文章推荐
5个javascript的数字格式化函数分享
Dec 07 Javascript
利用JQuery动画制作滑动菜单项效果实现步骤及代码
Feb 07 Javascript
Javascript学习笔记之 对象篇(一) : 对象的使用和属性
Jun 24 Javascript
javascript使用for循环批量注册的事件不能正确获取索引值的解决方法
Dec 20 Javascript
浅析js中substring和substr的方法
Nov 09 Javascript
基于javascript html5实现3D翻书特效
Mar 14 Javascript
vue.js实例todoList项目
Jul 07 Javascript
微信小程序开发之好友列表字母列表跳转对应位置
Sep 26 Javascript
vue2实现数据请求显示loading图
Nov 28 Javascript
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
Dec 27 Javascript
浅谈vue.use()方法从源码到使用
May 12 Javascript
更强大的vue ssr实现预取数据的方式
Jul 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
php $_SERVER windows系统与linux系统下的区别说明
2014/02/14 PHP
PHP 函数call_user_func和call_user_func_array用法详解
2014/03/02 PHP
PHP实现中国公民身份证号码有效性验证示例代码
2017/05/03 PHP
laravel 中如何使用ajax和vue总结
2017/08/16 PHP
PHP PDOStatement::setFetchMode讲解
2019/02/03 PHP
jquery之empty()与remove()区别说明
2010/09/10 Javascript
Javascript事件热键兼容ie|firefox
2010/12/30 Javascript
一个简单的Ext.XTemplate的实例代码
2012/03/18 Javascript
jquery实现checkbox全选全不选的简单实例
2013/12/31 Javascript
javascript十六进制及二进制转化的方法
2015/05/06 Javascript
浅谈javascript中的DOM方法
2015/07/16 Javascript
详解Angularjs 如何自定义Img的ng-load 事件
2017/02/15 Javascript
Bootstrap按钮组简单实现代码
2017/03/06 Javascript
详解如何使用Node.js编写命令工具——以vue-cli为例
2017/06/29 Javascript
使用vue与jquery实时监听用户输入状态的操作代码
2017/09/19 jQuery
使用Vue写一个datepicker的示例
2018/01/27 Javascript
JS 设计模式之:单例模式定义与实现方法浅析
2020/05/06 Javascript
Python 字符串操作实现代码(截取/替换/查找/分割)
2013/06/08 Python
实例说明Python中比较运算符的使用
2015/05/13 Python
Python操作csv文件实例详解
2017/07/31 Python
Python帮你微信头像任意添加装饰别再@微信官方了
2019/09/25 Python
对tensorflow中的strides参数使用详解
2020/01/04 Python
django 读取图片到页面实例
2020/03/27 Python
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
2020/04/02 Python
DRF使用simple JWT身份验证的实现
2021/01/14 Python
pycharm配置python 设置pip安装源为豆瓣源
2021/02/05 Python
canvas烟花特效锦集
2018/01/17 HTML / CSS
夏洛特和乔治婴儿和儿童时装精品店:Charlotte and George
2018/06/06 全球购物
abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?
2012/10/15 面试题
C#的几个面试问题
2016/05/22 面试题
写给妈妈的道歉信
2014/01/11 职场文书
村干部承诺书
2014/03/28 职场文书
奥巴马胜选演讲稿
2014/05/15 职场文书
2014年护士个人工作总结
2014/11/11 职场文书
2015年办公室人员工作总结
2015/05/15 职场文书
PyCharm 配置SSH和SFTP连接远程服务器
2022/05/11 Python