博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
axios携带cookie配置详解(axios+koa)
阅读量:6418 次
发布时间:2019-06-23

本文共 1695 字,大约阅读时间需要 5 分钟。

hot3.png

话不多说,一个字,干!

前端配置如下:

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();});

前端全栈学习交流圈:866109386,面向1-3经验年前端开发人员,帮助突破技术瓶颈,提升思维能力,群内有大量PDF可供自取,更有干货实战项目视频进群免费领取。

实例展示完了,我们来讲讲都是怎么回事

**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://my.oschina.net/u/3970421/blog/3001161

你可能感兴趣的文章
11 个简练的 Java 性能调优技巧
查看>>
linux 下安装 talib库
查看>>
高级文件系统管理磁盘配额,RAID
查看>>
Varnish安装
查看>>
海内外加速
查看>>
【数据库】分布式数据库技术与实现
查看>>
Oracle分析表及动态采样
查看>>
[BZOJ 1492][NOI2007]货币兑换Cash(CDQ分治+斜率优化Dp)
查看>>
ajax的使用
查看>>
windows 64位系统下 apache+php+mysql
查看>>
第八课 技术小白如何在45分钟内发行通证(TOKEN)并上线交易
查看>>
[Delphi] 字节序交换函数
查看>>
nvm 安装及使用
查看>>
实现线程池(一)线程池的基本概念
查看>>
网络流之最大流
查看>>
微信授权登录(yii)
查看>>
Jquery Easy UI--datagrid的使用(转)
查看>>
场景编辑器CocosBuilder使用教程
查看>>
告别忙碌
查看>>
Springboot学习01- 配置文件加载优先顺序和本地配置加载
查看>>