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的new操作符(一)
Dec 25 Javascript
javascript学习笔记(十) js对象 继承
Jun 19 Javascript
JS Array.slice 截取数组的实现方法
Jan 02 Javascript
JQuery的Pager分页器实现代码
May 03 Javascript
js实现多图左右切换功能
Aug 04 Javascript
javascript实现的左右无缝滚动效果
Sep 19 Javascript
JS正则匹配URL网址的方法(可匹配www,http开头的一切网址)
Jan 06 Javascript
Vue利用路由钩子token过期后跳转到登录页的实例
Oct 26 Javascript
vue.js todolist实现代码
Oct 29 Javascript
详解IOS微信上Vue单页面应用JSSDK签名失败解决方案
Nov 14 Javascript
Angular+ionic实现折叠展开效果的示例代码
Jul 29 Javascript
在react-antd中弹出层form内容传递给父组件的操作
Oct 24 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
destoon数据库表说明汇总
2014/07/15 PHP
ThinkPHP 404页面的设置方法
2015/01/14 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
php中输出json对象的值(实现方法)
2018/03/07 PHP
PHP使用mongoclient简单操作mongodb数据库示例
2019/02/08 PHP
用js计算页面执行时间的函数
2006/12/07 Javascript
JS判断元素为数字的奇异写法分享
2012/08/01 Javascript
Javascript this 的一些学习总结
2012/08/02 Javascript
Wireshark基本介绍和学习TCP三次握手
2016/08/15 Javascript
详解angular element()方法使用
2017/04/08 Javascript
react-router4 配合webpack require.ensure 实现异步加载的示例
2018/01/18 Javascript
JavaScript数组基于交换的排序示例【冒泡排序】
2018/07/21 Javascript
微信小程序tabBar设置实例解析
2019/11/14 Javascript
微信小程序 this.triggerEvent()的具体使用
2019/12/10 Javascript
Node.JS如何实现JWT原理
2020/09/18 Javascript
原生js实现滑块区间组件
2021/01/20 Javascript
Python中getattr函数和hasattr函数作用详解
2016/06/14 Python
浅谈Python 对象内存占用
2016/07/15 Python
python实时分析日志的一个小脚本分享
2017/05/07 Python
python爬取网易云音乐评论
2018/11/16 Python
基于numpy中的expand_dims函数用法
2019/12/18 Python
解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题
2020/04/27 Python
python Paramiko使用示例
2020/09/21 Python
HTML5+CSS3实现无插件拖拽上传图片(支持预览与批量)
2017/01/05 HTML / CSS
We Fashion荷兰:一家国际时装公司
2018/04/18 全球购物
Madewell澳大利亚官方网站:美国休闲服饰品牌
2019/07/18 全球购物
总经理秘书工作职责
2013/12/26 职场文书
采购部经理岗位职责
2014/02/10 职场文书
事务机电主管工作职责
2014/02/25 职场文书
毕业生自荐信如何写
2014/03/24 职场文书
综治维稳工作承诺书
2014/08/30 职场文书
2014乡镇领导班子四风对照检查材料思想汇报
2014/10/05 职场文书
民主生活会发言材料
2014/10/20 职场文书
2014年党建工作汇报材料
2014/11/02 职场文书
员工离职感谢信
2015/01/22 职场文书
如何用threejs实现实时多边形折射
2021/05/07 Javascript