当前位置: 移动技术网 > IT编程>脚本编程>vue.js > axios携带cookie配置详解(axios+koa)

axios携带cookie配置详解(axios+koa)

2019年01月04日  | 移动技术网IT编程  | 我要评论

拼布教程,闪婚演员表,4001867606

话不多说,一个字,干!

前端配置如下:

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

但是为什么会有两个中间件的设置呢,推荐文章 很细致哦

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网