node koa2设置允许多个域名跨域并携带cookie
原文链接: https://www.cnblogs.com/yalong/p/16450036.html
一般情况下,koa2设置跨域资源共享,下面的代码就够用了
app.use(async (ctx, next) => {
ctx.set('Access-Control-Allow-Origin', '*');
ctx.set('Access-Control-Allow-Headers', 'x-requested-with, accept, origin, content-type');
ctx.set('Access-Control-Allow-Methods', 'OPTIONS, GET, PUT, POST, DELETE');
await next();
});
上述代码对不需要携带cookie
的情况,是没问题的,但是如果需要携带cookie
,就不行了,
Access-Control-Allow-Origin
不能设置为 *
, 需要设置为具体的域名,而且还得加上 ctx.set('Access-Control-Allow-Credentials', 'true');
那么想要设置多个域名的跨域该怎么做呢,网上查到下面这种
Access-Control-Allow-Origin: https://www.aaa.com,https://www.bbb.com
但是一直有错误,行不通,于是有了下面这种方法
app.js
中代码如下
app.use(async (ctx, next) => {
ctx.set('Access-Control-Allow-Headers', 'x-requested-with, accept, origin, content-type');
ctx.set('Access-Control-Allow-Credentials', 'true');
ctx.set('Access-Control-Allow-Methods', 'OPTIONS, GET, PUT, POST, DELETE');
await next();
});
router.js中添加下面这个路由
router.all('*', async (ctx, next) => {
// 这里可以加上判断,看下这个域名是否有跨域的权限,没有的话就不用设置下面的代码了
ctx.set('Access-Control-Allow-Origin', ctx.request.header.origin);
await next(); // 进行下一步,匹配其他路由
});
就是在路由匹配之前,都走router.all * ,如果允许全部域名跨域,就直接设置
ctx.set('Access-Control-Allow-Origin', ctx.request.header.origin);
同时前端发送请求的时候也要加点配置
- 对于 XMLHttpRequerst 创建的ajax请求,需要设置 withCredentials 为 true
- 对于fetch 请求,需要设置 credentials 为 include
这样就能实现任意网站的跨域携带cookie的请求了
参考网址:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通