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

Serverless AWS CORS预检响应x-company-id头未允许问题排查

问题排查与解决方案

报错核心原因是浏览器发起的CORS预检(OPTIONS)请求返回的Access-Control-Allow-Headers响应头没有包含前端传递的x-company-id字段,虽然你在serverless.yml中做了对应配置,大概率是以下环节出了问题,按顺序排查即可:

  • 优先排查:自定义授权器拦截了预检请求
    你配置了type: TOKEN的自定义授权器,浏览器发送OPTIONS预检请求时不会携带业务侧的Authorization鉴权字段,会直接被授权器拦截返回401/403,这种情况下API Gateway根本不会执行你配置的CORS头注入逻辑,自然不会返回允许x-company-id的头。
    解决方法:给同路径单独新增OPTIONS方法的事件配置,不绑定授权器,专门处理预检请求,配置参考如下:
    healthPlan:
      handler: src/handlers/health-plan.healthPlanHandler
      events:
        # 原有GET方法配置保留,可删掉重复的小写x-company-id头配置,HTTP头名大小写不敏感,无需重复声明
        - http:
            path: /health-plan
            method: get
            cors:
              origin: ${self:custom.allowed-origin}
              allowCredentials: ${self:custom.allow-credentials}
              headers:
                - Content-Type
                - X-Amz-Date
                - Authorization
                - X-Api-Key
                - X-Amz-Security-Token
                - X-Amz-User-Agent
                - X-Company-Id
            authorizer:
              authorizerId: ${cf:auth-service-${self:provider.stage}.ApiAuthorizer}
              type: TOKEN
        # 新增OPTIONS方法配置,不绑定授权器
        - http:
            path: /health-plan
            method: options
            cors:
              origin: ${self:custom.allowed-origin}
              allowCredentials: ${self:custom.allow-credentials}
              headers:
                - Content-Type
                - X-Amz-Date
                - Authorization
                - X-Api-Key
                - X-Amz-Security-Token
                - X-Amz-User-Agent
                - X-Company-Id
    
  • 第二步:校验部署后API Gateway的实际配置
    本地修改yml后重新执行部署,部署完成后去API Gateway控制台找到对应环境的/health-plan资源,检查OPTIONS方法的集成响应、网关响应配置,确认Access-Control-Allow-Headers列表中确实包含X-Company-Id。如果控制台配置和yml不一致,手动补全后重新发布API对应阶段即可,这类配置同步问题在旧版本Serverless框架中比较常见。
  • 第三步:检查业务代码是否覆盖CORS响应头
    如果你在GET方法的Lambda处理逻辑中手动构造了HTTP响应头,需要确保响应中也携带了匹配的CORS头,不要只依赖OPTIONS方法的返回,部分浏览器会校验实际业务请求的CORS头匹配性。

快速验证方式:配置修改部署完成后,直接用curl发一个不带鉴权头的OPTIONS请求到接口地址,检查返回的响应头中是否存在Access-Control-Allow-Headers: X-Company-Id字段,如果存在说明预检链路配置正常,再从前端发起请求测试即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 21:45:34