koa设置跨域访问以及跨域验证cookie

环境

  • 后端框架: koa2

  • 前端请求框架: axios

解决跨域访问

koa加上如下代码:


app.use(async (ctx, next) => {
  ctx.set('Access-Control-Allow-Origin', ctx.headers.origin); // 很奇怪的是,使用 * 会出现一些其他问题
  ctx.set('Access-Control-Allow-Headers', 'content-type');
  ctx.set('Access-Control-Allow-Methods', 'OPTIONS,GET,HEAD,PUT,POST,DELETE,PATCH')
  await next();
});

解决跨域验证cookie失败

问题描述

在发送跨域请求时,浏览器默认不允许其他域发送cookie。

mk

request 的 credentials属性表示是否允许其他域发送cookie

  • omit: 默认属性,不允许其他域发送cookie

  • same-origin: 只允许同域发送cookie

  • include: 总是允许发送cookie

解决

后端加上:

ctx.set('Access-Control-Allow-Credentials', true);

前端加上:

axios

axios({
  url: url,
  method: method,
  data: data,
  withCredentials: true // 允许跨域发生cookie
})

jquery

$.ajax({
  url: url,
  type: type,
  data: data,
  xhrFields: {
    withCredentials: true
  },
  success: function (data) {
    console.log(data)
  }
})

推荐阅读更多精彩内容