【问题标题】:Setting http response header from AWS lambda从 AWS lambda 设置 http 响应标头
【发布时间】:2017-08-28 16:36:16
【问题描述】:

我的 API Gateway/Lambda 设置返回一个 HTTP 响应标头: Lambda 使用回调函数将值作为 JSON 的一部分返回 集成响应将其映射到 HTTP 标头(使用 integration.response.body

使用此解决方案,值会在正文和标头中发送回。

如何在不复制响应正文中的值的情况下映射 Lambda 响应的标头?

【问题讨论】:

    标签: amazon-web-services aws-lambda aws-api-gateway


    【解决方案1】:

    如果您启用了 Lambda 代理集成,您可以将响应标头设置为 Lambda 输出的一部分,API Gateway 会将它们作为 HTTP 响应的一部分返回给客户端。

    Node.js 示例:

    callback(null, {
        "isBase64Encoded": false, // Set to `true` for binary support.
        "statusCode": 200,
        "headers": {
            "header1Name": "header1Value",
            "header2Name": "header2Value",
        },
        "body": "...",
    });
    

    如果不返回额外的响应标头,headers 可以为 null 或未指定。

    Output Format of a Lambda Function for Proxy Integration

    【讨论】:

    【解决方案2】:

    并且,如果您启用了 Lamba 代理集成,您可以在亚马逊 API 网关控制台中添加(和映射)响应标头:

    转到资源->方法执行->方法响应->为http状态200添加'Access-Control-Allow-Origin'(或其他)标头。然后返回方法执行->集成响应->http状态200 -> 将“Access-Control-Allow-Origin”的标头映射设置为“*”(或其他)。

    解决了这个错误...:“请求的资源上没有'Access-Control-Allow-Origin'标头”

    【讨论】:

      【解决方案3】:

      由于问题指出正在使用自定义映射(使用 integration.response.body),这意味着 Lambda 代理集成正在使用。因此,在这种情况下,解决方案是按照您已经在做的方式映射标题。

      要从正文部分删除重复的标题,请在集成响应中使用映射模板并忽略映射中的标题。我认为您可能正在使用传递响应,这就是您看到重复标题的原因。

      在此处查看更多文档:https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-12
        • 2016-12-15
        • 1970-01-01
        • 1970-01-01
        • 2016-06-04
        相关资源
        最近更新 更多