API Gateway自定义授权器请求头大小写不一致问题问询
问题:API Gateway自定义授权器Lambda事件中请求头大小写不一致
我有一个配置了自定义授权器的REST API Gateway,根据AWS官方文档,请求头应该会被传入触发授权器的Lambda事件中。但实际发现请求头名称有时会被转为小写,有时却保持原始大小写,以下是两种情况的API Gateway日志示例:
无大小写转换的日志
Endpoint request body after transformations: {"type":"REQUEST", "methodArn":"arn:aws:execute-api:eu-south-1:634374009822:ybm6x73l0l/unique/POST/attachments", "resource":"/attachments", "path":"/delivery/attachments", "httpMethod":"POST", "headers": {"Accept":"application/json", "Accept-Encoding":"gzip, deflate, br", "Authorization":"Bearer xxxxx [TRUNCATED]" }
有大小写转换的日志
Endpoint request body after transformations: {"type":"REQUEST", "methodArn":"arn:aws:execute-api:eu-south-1:634374009822:ybm6x73l0l/unique/POST/attachments", "resource":"/attachments", "path":"/delivery/attachments", "httpMethod":"POST", "headers": {"accept":"application/json", "accept-encoding":"gzip, deflate, br", "authorization":"Bearer xxxxx [TRUNCATED]" }
我知道HTTP头本身是大小写不敏感的,但想弄明白出现这种现象的原因。
原因分析
- 部署方式差异:如果API同时存在控制台手动部署和CloudFormation/CDK等自动化工具部署的情况,两种部署方式的头处理逻辑可能不同。自动化部署工具通常会默认将请求头标准化为小写,而控制台部署可能保留原始请求头的大小写格式。
- 请求链路差异:请求经过的集成环节不同会影响头的格式——比如经过CloudFront等CDN层时,CDN会自动将请求头转为小写后再转发给API Gateway;而直接访问API Gateway的请求则会保留原始大小写。另外,使用VPC链路、私有集成和直接Lambda集成的不同配置,也会触发不同的头处理逻辑。
- API阶段配置差异:不同的API阶段(如测试环境和生产环境)如果启用了不同的插件或参数标准化设置,也可能导致请求头大小写不一致。
- API Gateway版本迭代:AWS对API Gateway的底层逻辑会持续优化更新,不同版本的服务在处理请求头时,可能存在大小写处理的细微差别。
另外,虽然HTTP协议规定头名称大小写不敏感,但为了避免这类问题,建议在Lambda授权器代码里统一将头名称转为小写(或大写)后再进行判断,不要依赖原始的大小写格式。
内容的提问来源于stack exchange,提问作者Matteo Turra
相关产品推荐
相关产品推荐

