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

Hapi v21.2.2服务器CORS报错:Request header field authorization不被允许

Hapi v21.2.2 跨域Authorization头问题解决办法

问题核心是:浏览器预请求(OPTIONS)返回的Access-Control-Allow-Headers响应头未包含Authorization,导致浏览器拦截后续带该头的请求。即使OPTIONS返回204状态码,只要头不匹配就会触发CORS报错。

全局CORS配置(推荐)

在服务器初始化时显式配置允许Authorization头:

import Hapi from '@hapi/hapi';

const init = async () => {
    const server = Hapi.server({
        port: 3000,
        host: 'localhost',
        routes: {
            cors: {
                origin: ['https://your-frontend-domain.com'], // 替换为实际前端域名,带凭证场景不要用*
                headers: ['Authorization', 'Content-Type'], // 必须显式包含Authorization
                credentials: true, // 请求带凭证(如Authorization、cookie)时需开启
                exposedHeaders: ['Authorization'] // 前端需要读取响应中的Authorization头时添加
            }
        }
    });

    // 示例受保护路由
    server.route({
        method: 'GET',
        path: '/api/protected',
        handler: (req, h) => {
            return { status: 'ok', user: req.auth.credentials };
        }
    });

    await server.start();
    console.log('Server running at:', server.info.uri);
};

process.on('unhandledRejection', err => {
    console.error(err);
    process.exit(1);
});

init();

路由级单独配置

仅需给特定路由开启跨域支持时使用:

server.route({
    method: 'POST',
    path: '/api/auth',
    handler: (req, h) => {
        return { token: 'generated-token' };
    },
    options: {
        cors: {
            origin: ['https://your-frontend-domain.com'],
            headers: ['Authorization', 'Content-Type'],
            credentials: true
        }
    }
});

验证配置是否生效

用curl模拟预请求,检查响应头:

curl -X OPTIONS -H "Access-Control-Request-Headers: authorization" http://localhost:3000/api/protected -v

确保响应中存在Access-Control-Allow-Headers: Authorization, Content-Type。

注意事项

  • 带凭证的请求不能用origin: ['*'],必须指定具体前端域名,否则浏览器会拒绝
  • 若使用Hapi认证插件(如@hapi/jwt),确保插件逻辑不会覆盖CORS响应头
  • 服务器有反向代理(如Nginx)时,需确保代理也正确传递CORS相关头

内容的提问来源于stack exchange,提问作者bbnn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:57:17