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引用对象的方法
Jan 11 Javascript
JS 自定义函数缺省值的设置方法
May 05 Javascript
jQuery选中select控件 无法设置selected的解决方法
Sep 01 Javascript
jQuery之排序组件的深入解析
Jun 19 Javascript
js创建对象的区别示例介绍
Jul 24 Javascript
TypeScript 学习笔记之基本类型
Jun 19 Javascript
浅析在javascript中创建对象的各种模式
May 06 Javascript
JS实现鼠标滑过显示边框的菜单效果
Sep 21 Javascript
Angular.Js的自动化测试详解
Dec 09 Javascript
详解js前端代码异常监控
Jan 11 Javascript
js中删除数组中的某一元素实例(无下标时)
Feb 28 Javascript
easyui combogrid实现本地模糊搜索过滤多列
May 13 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中使用CURL伪造来路抓取页面或文件
2011/05/04 PHP
PHP面向对象学习笔记之一 基础概念
2012/10/06 PHP
PHP error_log()将错误信息写入一个文件(定义和用法)
2013/10/25 PHP
php读取大文件示例分享(文件操作类)
2014/04/13 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
JavaScript Base64编码和解码,实现URL参数传递。
2006/09/18 Javascript
JavaScript 异步调用框架 (Part 4 - 链式调用)
2009/08/04 Javascript
javascript textarea光标定位方法(兼容IE和FF)
2011/03/12 Javascript
JavaScript匿名函数用法分析
2015/02/13 Javascript
jQuery获取标签文本内容和html内容的方法
2015/03/27 Javascript
JS实现光滑展开合拢的菜单效果代码
2015/09/16 Javascript
不得不分享的JavaScript常用方法函数集(上)
2015/12/23 Javascript
有关suggest快速删除后仍然出现下拉列表的bug问题
2016/12/02 Javascript
Bootstrap 下拉多选框插件Bootstrap Multiselect
2017/01/22 Javascript
JS表单验证方法实例小结【电话、身份证号、Email、中文、特殊字符、身份证号等】
2017/02/14 Javascript
JavaScript中offsetWidth的bug及解决方法
2017/05/17 Javascript
jquery.uploadView 实现图片预览上传功能
2017/08/10 jQuery
Vue组件开发之LeanCloud带图形校验码的短信发送功能
2017/11/07 Javascript
关于Vue的路由权限管理的示例代码
2018/03/06 Javascript
jQuery实现下拉菜单动态添加数据点击滑出收起其他功能
2018/06/14 jQuery
在vue中安装使用vux的教程详解
2018/09/16 Javascript
微信小程序swiper左右扩展各显示一半代码实例
2019/12/05 Javascript
vue项目中监听手机物理返回键的实现
2020/01/18 Javascript
AHAVA美国官方网站:死海海泥护肤品牌
2016/10/18 全球购物
皇家道尔顿官网:Royal Doulton
2017/12/06 全球购物
可口可乐唇膏:Lip Smackers
2019/08/27 全球购物
护理专业推荐信
2013/11/07 职场文书
《那片绿绿的爬山虎》教学反思
2014/02/27 职场文书
主管会计岗位职责
2014/03/13 职场文书
课外访万家心得体会
2014/09/03 职场文书
离婚财产处理协议书
2014/09/30 职场文书
查摆问题整改措施范文
2014/10/11 职场文书
中学感恩教育活动总结
2015/05/05 职场文书
如何解决.cuda()加载用时很长的问题
2021/05/24 Python
Mysql实现简易版搜索引擎的示例代码
2021/08/30 MySQL
yyds什么意思?90后已经听不懂00后讲话了……
2022/02/03 杂记