You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hapi 17版本后如何启用CORS?v18+语法变更后的配置疑问

Hapi v18+ 正确启用CORS的配置方法

全局CORS配置(所有路由通用)

Hapi v18+ 依然支持全局配置CORS,但相比旧版本,显式声明允许的来源会更稳妥——这也是很多人遇到配置不生效的核心原因。示例代码:

const server = Hapi.server({
    port: 3000,
    host: 'localhost',
    routes: {
        cors: {
            origin: ['*'], // 测试场景允许所有域名,生产环境建议替换为具体可信域名
            additionalHeaders: ['X-Requested-With'] // 按需添加允许的自定义请求头
        }
    }
});

如果是简单测试场景,也可以直接写cors: true,但复杂请求(如带自定义头)可能需要显式配置才能触发正确的CORS响应头。

单路由单独配置CORS

针对单个路由配置时,仅写cors: true经常会不生效,因为Hapi v18+对默认规则做了收紧,需要明确指定允许的来源。正确示例:

{
    method: "GET",
    path: "/getCountyByState/{state}",
    options: {
        cors: {
            origin: ['*'], // 替换为你的前端实际域名,比如['https://your-frontend.com']
            credentials: true // 如果需要前端携带Cookie或认证信息,必须开启此项
        }
    },
    handler: async function (request, h) {
        request.log('error', 'Event error');
        // 记得补充handler的返回逻辑,比如 return h.response({ data: ... });
    }
}

常见坑点提示

  • 前端发送跨域请求时如果带了凭证(如Cookie),后端必须设置credentials: true,同时前端要开启withCredentials。
  • 生产环境绝对不能用origin: ['*'],必须指定具体的可信域名,避免跨域安全风险。

内容的提问来源于stack exchange,提问作者Not a machine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 01:30:02