使用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: trueAWS::ApiGateway::RestApi:
配置完成后重新部署SAM应用,API Gateway就会保留带下划线的请求头。Resources: YourRestApi: Type: AWS::ApiGateway::RestApi Properties: Name: YourApiName Parameters: endpointConfiguration.enableHttpHeadersWithUnderscores: true
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
相关产品推荐
相关产品推荐

