axios 携带cookie_axios携带cookie配置(axios+koa)

本文介绍了如何在axios中配置携带cookie,并详细讲解了与CORS跨域相关的配置,包括前端的axios.defaults.withCredentials设为true,以及后端Koa设置Access-Control-Allow-Origin和Access-Control-Allow-Credentials。还探讨了非简单请求的OPTIONS预检请求和Access-Control-Max-Age的作用,以提高跨域请求的效率。
摘要由CSDN通过智能技术生成

话不多说,一个字,干!

前端配置如下:

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时,就不需要再进行预检,可以直接发送一次请求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值