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

如何配置AWS Lambda以控制HTTP响应的状态码、正文与请求头?

解决Lambda控制API Gateway HTTP响应的方法

1. 问题根源:API Gateway集成类型不对

你当前的API Gateway用了非代理集成,所以会直接把Lambda的返回值原样返回。要让Lambda完全掌控HTTP响应的状态码、正文和响应头,必须切换为Lambda代理集成。

开启Lambda代理集成步骤

  • 打开AWS控制台的API Gateway,找到你的REST API及对应资源/方法(比如POST /testing)
  • 进入集成请求页面,把集成类型改成Lambda函数代理
  • 保存设置后,重新部署API到对应的阶段(比如testing)

2. 调整Lambda代码格式(代理集成规范)

开启代理集成后,Lambda的返回格式要符合API Gateway的要求,这样就能灵活控制响应参数:

import json

def lambda_handler(event, context):
    return {
        "statusCode": 200,
        "headers": {
            "Content-Type": "application/json",
            "X-Custom-Header": "MyCustomValue"  # 自定义响应头
        },
        "body": json.dumps({
            "message": "Hello from Lambda!"
        })
    }

注意事项:

  • body必须是字符串格式,返回JSON时要用json.dumps()转换;返回纯文本直接写字符串即可
  • headers里可以添加任意自定义头,也能通过Content-Type指定响应类型(比如text/plain、application/xml)

如果要返回纯文本响应,代码可以简化:

def lambda_handler(event, context):
    return {
        "statusCode": 200,
        "headers": {
            "Content-Type": "text/plain"
        },
        "body": "Hello from Lambda!"
    }

3. 非代理集成的替代方案(灵活性差,不推荐)

如果不想用代理集成,也可以在API Gateway的集成响应里配置映射模板,把Lambda返回值映射成HTTP响应:

  • 进入集成响应页面,选择目标状态码(比如200)
  • 在映射模板中添加application/json模板,输入:
    #set($inputRoot = $input.path('$'))
    $inputRoot.body
    
    这种方式会把Lambda返回的body字段作为HTTP响应体,但无法在Lambda里动态修改状态码和响应头,仅适合简单场景。

测试验证

修改配置和代码后重新部署API,用curl测试即可看到符合预期的响应:

curl -X POST https://redacted.execute-api.us-east-1.amazonaws.com/testing/

内容的提问来源于stack exchange,提问作者Jack M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:20:31