资讯专栏INFORMATION COLUMN

axios携带cookie配置(axios+koa)

张巨伟 / 2969人阅读

摘要:通过将属性设置为,可以指定某个请求应该发送凭据。前台跨域请求,由于规范的存在,浏览器会首先发送一次嗅探,同时带上,判断是否有跨域请求权限,服务器响应的值,供浏览器与匹配,如果匹配则正式发送请求。

话不多说,一个字,干!

前端配置如下:

   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://www.jb51.net/article/... 很细致哦

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/100454.html

相关文章

  • Vue全栈开发之百度贴吧

    这个百度贴吧的项目是 vue + koa + sequelize 的项目。 由于没有百度贴吧API接口,所以自己写了后端 项目部分截图(GIF) showImg(https://user-gold-cdn.xitu.io/2019/7/13/16bea513a0805b84?w=480&h=1040&f=gif&s=4456077);showImg(https://user-gold-cdn.xi...

    stefanieliang 评论0 收藏0
  • Cookie就摆在那,为什么死活吃不到?

    摘要:查找原因无法获取到是因为同源策略和标记的原因。在同一个站点下使用属性是无效的。此外,这个指示也会被用做响应中被忽视的标示。而通过设置为获得的第三方,将会依旧享受同源策略,因此不能被通过或者从头部相应请求的脚本等访问。 作者:codexu _ showImg(https://segmentfault.com/img/remote/1460000020161476); 浏览器里明明存在的c...

    shmily 评论0 收藏0
  • 你不知道的CORS跨域资源共享

    摘要:同源策略禁止使用对象向不同源的服务器地址发起请求。借助于决解同源策略决解同源策略,新方案跨域资源共享这里讲的重点跨域资源共享提供的标准跨域解决方案,是一个由浏览器共同遵循的一套控制策略,通过的来进行交互主要通过后端来设置配置项。 了解下同源策略 源(origin)*:就是协议、域名和端口号; 同源: 就是源相同,即协议、域名和端口完全相同; 同源策略:同源策略是浏览器的一个安全...

    Gu_Yan 评论0 收藏0

发表评论

0条评论

张巨伟

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<