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

使用SAM CLI创建的AWS API Gateway如何接受含下划线的请求头

解决API Gateway移除带下划线请求头的问题

API Gateway默认会移除含下划线的请求头,要解决这个问题(且无法修改客户端请求),可以按以下方案操作:

1. 开启API Gateway允许下划线请求头(REST API专属)

这是最直接的解决方案,适用于用SAM创建的REST API:

  • 控制台操作:进入AWS控制台的API Gateway服务,找到你的API → 进入「Stages」页面选择部署的阶段 → 切换到「Settings」标签 → 勾选「Enable HTTP Headers with Underscores」选项,保存修改后重新部署API。
  • SAM模板配置:如果用SAM模板定义API,直接在对应资源中添加参数配置:
    对于AWS::Serverless::Api:
    Resources:
      YourApi:
        Type: AWS::Serverless::Api
        Properties:
          StageName: prod
          Parameters:
            enableHttpHeadersWithUnderscores: true
    
    对于传统AWS::ApiGateway::RestApi:
    Resources:
      YourRestApi:
        Type: AWS::ApiGateway::RestApi
        Properties:
          Name: YourApiName
          Parameters:
            endpointConfiguration.enableHttpHeadersWithUnderscores: true
    
    配置完成后重新部署SAM应用,API Gateway就会保留带下划线的请求头。

2. 确认使用Lambda代理集成(若后端是Lambda)

如果你的API使用Lambda代理集成,开启上述设置后,所有请求头(包括access_token)会完整传递到Lambda的事件对象中,你可以通过event.headers.access_token直接获取该值。

3. 备选:使用请求映射模板手动保留请求头

如果无法开启全局允许下划线的设置,可以针对特定接口配置请求映射模板,手动保留需要的请求头:
在API Gateway的集成请求中,添加映射模板(比如Content-Type为application/json),将access_token头写入请求体或传递给后端:

{
  "headers": {
    "access_token": "$input.params('access_token')",
    "other-header": "$input.params('other-header')"
  }
}

这种方式需要逐个接口配置,适合仅需保留少数特定带下划线请求头的场景。

注意:如果是HTTP API(而非REST API),API Gateway默认允许带下划线的请求头,无需额外配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 16:43:32