API Gateway未透传Content-Type请求头到Lambda该如何解决?
解决方案
情况1:使用的是API Gateway REST API
- 进入API Gateway控制台,找到对应API的「方法请求」配置页
- 下拉到「HTTP 请求头」部分,点击「添加请求头」
- 名称填写
Content-Type,勾选「必需的」和「已启用」 - 再进入「集成请求」配置页,下拉到「HTTP 标头映射」部分
- 点击「添加标头」,名称填
Content-Type,映射值写method.request.header.Content-Type - 保存配置后重新部署API生效
如果是用Serverless Framework部署的,可以直接在函数的events配置里添加允许头规则,示例配置:
functions: yourFunctionName: handler: handler.run events: - http: path: your/upload/path method: post cors: allowHeaders: - Content-Type
情况2:使用的是API Gateway HTTP API
HTTP API默认会透传绝大多数请求头到Lambda,请求头缺失大概率是参数取值路径写错:
- Lambda event里的请求头存放在
headers字段下,所有key会被自动转为小写,需要取content-type而不是驼峰格式的Content-Type - 如果配置了CORS规则,需要在CORS配置的「允许的标头」列表里加上
Content-Type,重新部署后生效
额外校验步骤
配置完成后如果还是取不到值,可以先使用API Gateway控制台自带的测试功能,直接发送带
Content-Type: multipart/form-data的请求,查看测试返回的「集成请求」日志,确认标头是否已经被正确传递到Lambda侧。
如果你开启了Lambda代理集成,不需要额外配置标头映射,只需要确保请求头在允许列表中,就能直接在event.headers里拿到对应值。
内容的提问来源于stack exchange,提问作者Lycaon
相关产品推荐
相关产品推荐

