从AWS lambda设置http响应头

时间:2017-04-03 17:36:29

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

我的API网关/ Lamdba设置返回一个http响应标头: Lamdba使用回调函数将值作为json的一部分返回 并且Integration Response将其映射到标题(使用integration.response.body)

使用此解决方案,值将在正文和标题中发回。

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

3 个答案:

答案 0 :(得分:29)

如果您启用了 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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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

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

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