2018年AWS Lambda代理集成场景下如何获取请求头?
解决AWS代理集成下获取
x-requested-with请求头的问题 我完全懂你现在的困扰——之前用Mapping Template拿请求头好好的,切换到AWS推荐的代理集成后,明明CloudWatch日志里能看到x-requested-with存在,可代码里就是拿不到,各种对象调用都显示未定义,确实挺挠头的。
下面分两种最常见的代理集成场景给你说解决办法:
一、如果是Lambda代理集成
Lambda代理集成的事件结构里,请求头是直接挂在顶层event对象的headers属性下的,但有个容易踩的坑:API Gateway会把所有请求头的键转换成小写。也就是说,前端传的X-Requested-With到了Lambda里会变成x-requested-with,如果你用大写的键去访问肯定找不到。
举个Python Lambda的示例代码,稳妥的写法是这样:
def lambda_handler(event, context): # 用get方法避免键不存在时报错 requested_with_header = event.get('headers', {}).get('x-requested-with') if requested_with_header: print(f"成功获取X-Requested-With头:{requested_with_header}") else: print("未找到X-Requested-With头") # 你的业务逻辑... return { 'statusCode': 200, 'body': '请求处理完成' }
另外,如果你的请求头可能有多个值(虽然x-requested-with一般不会),可以去event.multiValueHeaders里找,用法和headers类似。
二、如果是HTTP代理集成(直接代理到后端HTTP服务)
这种情况下,API Gateway默认不会把所有请求头都传递给后端,需要你手动配置头映射:
- 打开API Gateway控制台,找到你的API和对应的资源、方法
- 进入「集成请求」设置,找到「HTTP头」部分
- 点击「添加头」,源填
method.request.header.x-requested-with,目标填x-requested-with(保持和原头名一致) - 保存并重新部署API到对应的阶段
这样配置后,API Gateway就会把x-requested-with头完整传递给后端服务了。另外要注意,后端接收时也要用小写的头名去获取,因为API Gateway会自动转成小写。
最后排查小技巧
- 再去CloudWatch日志里确认下
event的完整结构,看看headers里到底有没有x-requested-with(有时候可能是前端传头时拼写错误) - 如果是Lambda集成,别搞错了路径——是
event.headers,不是event.request.headers或者其他嵌套路径
内容的提问来源于stack exchange,提问作者Michael Coxon
相关产品推荐
相关产品推荐

