koa开启cors允许跨域,携带cookies

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了koa开启cors允许跨域,携带cookies相关的知识,希望对你有一定的参考价值。

参考技术A 使用koa开发想要开启 cors 非常简单,已经有对应的库: @koa/cors 。

虽然库的readme没有具体介绍具体的用法,但是我们可以通过阅读测试用例知道可以传什么参数,什么类型。

只需要两行,接口就会在返回数据的时候带上 Access-Control-Allow-Origin 响应头。默认允许所有请求方式跨域, Access-Control-Allow-Origin 默认为 * 。

为了安全考虑,携带cookies的跨域请求只允许 Access-Control-Allow-Origin 为单一域名,即只支持一个域名在请求的时候携带cookies。且需要带上响应头 Access-Control-Allow-Credentials

对 @koa/cors 添加配置 origin 和 credentials :

同时,前端要发起携带cookies的跨域请求,需要设置 XMLHttpRequest 的 withCredentials 为 true ,如果你是使用 axios ,只需要在请求配置里加上一句 withCredentials: true ,请看例子:

这样前端( http://koa.com )就可以向后端( http://localhost:8000 )发送请求了。

如果你的前端地址只有一个,给 @koa/cors 的 origin 添加一个域名就能满足需求,如果需要支持跨域的域名有多个呢?
通过观察 @koa/cors 的 单元测试用例 ,可以发现 origin 是支持用函数的方式传入的。这样我们就可以维护一个域名数组,判断请求地址是否在域名数组内,就能知道是否要对请求地址提供携带cookies请求支持了。

要想知道发起请求的前端地址,可以使用 ctx.request.header.origin 。注意 ctx.request.header.origin 和 ctx.request.origin 是不同的。 ctx.request.origin 是接口域名, ctx.request.header.origin 是发起请求的页面域名。

以上是关于koa开启cors允许跨域,携带cookies的主要内容,如果未能解决你的问题,请参考以下文章

Koa 中通过 Koa2-cors 配置服务器端允许跨域以及 Cookie 允许跨域

koa2-JWT登录验证上传图片上传视频允许跨域

koa2-cors应答跨域请求实现

django跨域支持

WebApi开启CORS支持跨域POST

fetch跨域问题