从AWS Lambda设置HTTP响应头

49

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

通过这种解决方案,这些值既在正文中发送,也在头部中发送。

如何在不重复响应正文中的值的情况下映射来自Lambda响应的头部?

3个回答

74
如果启用了 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或未指定,如果不需要返回额外的响应头。

请参见Lambda函数代理集成的输出格式


1
如果我没记错的话,Lambda函数的代理集成输出格式应该在这里:https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html?shortFooter=true#api-gateway-simple-proxy-for-lambda-output-format - StudentsTea
1
@StudentsTea:看起来链接最近被更改了。感谢编辑 :) - Khalid T.
1
执行 JSON.stringify(body) - djra

15

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

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

解决此错误:“请求的资源上不存在'Access-Control-Allow-Origin'标头”


如果我想要为所有函数和所有响应代码添加HSTS响应头和其他安全头,该怎么办? - Rony Tesler

3

由于问题说明正在使用自定义映射(使用integration.response.body),这意味着使用Lambda Proxy集成。因此,在这种情况下,解决方案是以你已经采用的方式映射标头。

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

有关更多文档,请参见:https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接