【问题标题】:Why does this AWS Lambda function return JSON instead of HTML?为什么此 AWS Lambda 函数返回 JSON 而不是 HTML?
【发布时间】:2023-03-27 02:08:01
【问题描述】:

我有以下 lambda 函数,带有 API 网关触发点:

def lambda_handler(event, context):
resp = {
    "statusCode": 200,
    "headers": {
        "Access-Control-Allow-Origin": "*",
    },
    "body": "Hello, World!"
}

return resp

当我导航到 API 端点时,我希望只看到文本“Hello, World!”。相反,我看到了整个 JSON 响应。如何更改此函数,以便它解释标题和状态代码,而不是作为在浏览器中呈现的内容?

【问题讨论】:

    标签: python python-3.x amazon-web-services aws-lambda aws-api-gateway


    【解决方案1】:

    假设您的 API Gateway 使用 Lambda 代理集成,只需在您的响应中添加 content-type: text/html

    【讨论】:

      【解决方案2】:

      这是因为使用 lambda 函数配置 lambda 的方式。看起来它被配置为 Lambda 代理。如果您想查看整个 JSON 作为输出,只需禁用 Use Lambda Proxy integration。您可以在 API Gateway 控制台中找到此配置。

      在 API Gateway 控制台中启用 Use Lambda Proxy integration 以仅查看“Hello, World!”

      【讨论】:

        【解决方案3】:

        一种选择是使用此函数从 API 网关设置 lambda 代理集成选项。它只会把你的身体送回去。您可以快速设置。这是官方链接。 link

        【讨论】:

          【解决方案4】:

          Lambda 和 API Gateway 不应用作返回 HTML 的 Web 服务器。他们甚至没有为此进行优化,这会浪费资源。

          您应该做的是将您的 HTML 托管在其他地方,使用 JavaScript 与您的 API 通信,获取动态数据,然后根据 API 响应操作 HTML。

          如果您想要静态 HTML 托管的无服务器方法,我推荐 S3 + CloudFront

          【讨论】:

          • 这个答案错过了问题的重点,这就是为什么 API Gateway 将整个 JSON 对象返回给客户端而不是解释它以生成带有提供的正文、标头和状态代码的 HTTP 响应. (如果您忽略使用 Lambda 代理集成功能,就会出现这种情况。)
          • 虽然你是对的,但我仍然认为值得提供一个全面的观点,而不是在不考虑上下文和决策含义的情况下回答。您指出的内容已经有了答案,但尚未被接受。正如我所做的那样,我认为发布替代架构和云资源使用的建议没有任何害处......
          猜你喜欢
          • 1970-01-01
          • 2023-03-23
          • 2017-01-20
          • 2019-09-12
          • 2021-07-12
          • 1970-01-01
          • 2020-10-17
          • 2019-06-02
          • 2020-09-19
          相关资源
          最近更新 更多