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 相关文章推荐
jQuery UI Dialog 创建友好的弹出对话框实现代码
Apr 12 Javascript
jquery的冒泡事件的阻止与允许(三种实现方法)
Feb 01 Javascript
JQuery实现鼠标滑过显示导航下拉列表
Sep 12 Javascript
自己编写的类似JS的trim方法
Oct 09 Javascript
js实现单行文本向上滚动效果实例代码
Nov 28 Javascript
JS获得QQ号码的昵称,头像,生日的简单实例
Dec 04 Javascript
关于backbone url请求中参数带有中文存入数据库是乱码的快速解决办法
Jun 13 Javascript
jQuery制作圣诞主题页面 更像是爱情影集
Aug 10 Javascript
vue.js实例对象+组件树的详细介绍
Oct 20 Javascript
小程序实现发表评论功能
Jul 06 Javascript
详解vue的数据劫持以及操作数组的坑
Apr 18 Javascript
tsconfig.json配置详解
May 17 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 XPath对XML文件查找及修改实现代码
2011/07/27 PHP
php实现事件监听与触发的方法
2014/11/21 PHP
通过修改配置真正解决php文件上传大小限制问题(nginx+php)
2015/09/23 PHP
PHP实现数组array转换成xml的方法
2016/07/19 PHP
跨浏览器的设置innerHTML方法
2006/09/18 Javascript
js GridView 实现自动计算操作代码
2009/03/25 Javascript
javascript对下拉列表框(select)的操作实例讲解
2013/11/29 Javascript
javascript中的self和this用法小结
2014/02/08 Javascript
JQuery插件jcarousellite的参数中文说明
2015/05/11 Javascript
IE浏览器下PNG相关功能
2015/07/05 Javascript
js图片翻书效果代码分享
2015/08/20 Javascript
微信小程序实现动态设置页面标题的方法【附源码下载】
2017/11/29 Javascript
vue 实现axios拦截、页面跳转和token 验证
2018/07/17 Javascript
Vue实现将数据库中带html标签的内容输出(原始HTML(Raw HTML))
2019/10/28 Javascript
javascript实现弹出层效果
2019/12/10 Javascript
JS面向对象之多选框实现
2020/01/17 Javascript
python实现的文件夹清理程序分享
2014/11/22 Python
Python实现分割文件及合并文件的方法
2015/07/10 Python
在Django框架中伪造捕捉到的URLconf值的方法
2015/07/18 Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
2017/08/30 Python
Python爬虫实例_利用百度地图API批量获取城市所有的POI点
2018/01/10 Python
用python生成(动态彩色)二维码的方法(使用myqr库实现)
2019/06/24 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
2020/05/26 Python
Html5+CSS3+EL表达式问题小结
2020/12/19 HTML / CSS
一份Java笔试题
2012/02/21 面试题
大学生咖啡店创业计划书
2014/01/21 职场文书
毕业自我鉴定总结
2014/03/24 职场文书
《独坐敬亭山》教学反思
2014/04/08 职场文书
公司领导班子对照材料
2014/08/18 职场文书
办公楼租房协议书范本
2014/11/25 职场文书
公安机关起诉意见书
2015/05/20 职场文书
《鲁班学艺》读后感3篇
2019/11/27 职场文书
如何在pycharm中快捷安装pip命令(如pygame)
2021/05/31 Python
Python使用海龟绘图实现贪吃蛇游戏
2021/06/18 Python
Oracle 死锁的检测查询及处理
2021/09/25 Oracle
JavaScript圣杯布局与双飞翼布局实现案例详解
2022/08/05 Javascript