我有一个位于lambda前面的api网关端点(不使用lambda代理集成,使用自定义lambda集成)。 Lambda返回以下内容:
module.exports.handler = async (event, context) => {
const response = {
statusCode: 200,
body: JSON.stringify({
message: 'some message'
}),
headers: {
bob: 'this is bob'
},
};
return response;
};
我试图像在集成请求中那样访问标头bob:integration.response.header.bob。这行不通。我可以像Integration.response.body.headers.bob这样从身体中弄出来。我认为前者不起作用,因为我没有使用Lambda代理集成?还注意到,我可以检索Integration.response.header.Content-Type。有人可以解释一下如何正确添加从lambda传递的自定义标头,就像上面的代码一样(或者像我尝试的那样,是从正文中获取它的唯一选择)?
答案 0 :(得分:0)
集成标头(integration.header.header-name)是Lambda服务发送到API网关的标头。我们无法控制这些标头。这些是标准标头-Content-Type,Date等,并且是“端点响应标头”的一部分。
因此,您控制的自定义标头是“端点响应主体”的一部分。要回答您的问题-是的,您必须从正文中检索自定义标头。
检查以下API网关执行日志摘要,以了解区别。
Mon Jun 22 04:28:51 UTC 2020 : Endpoint response headers: {Date=Mon, 22 Jun 2020 04:28:51 GMT, Content-Type=application/json, Content-Length=72, Connection=keep-alive, x-amzn-RequestId=4d6d78b5-bb45-4e8d-893f-a409563e493c, x-amzn-Remapped-Content-Length=0, X-Amz-Executed-Version=$LATEST, X-Amzn-Trace-Id=root=1-5ef03382-d494d01d575754f5b551dfd3;sampled=0}
Mon Jun 22 04:28:51 UTC 2020 : Endpoint response body before transformations: {"statusCode": 200, "body": "Hello!", "headers": {"bob": "this is bob"}}
Mon Jun 22 04:28:51 UTC 2020 : Method response body after transformations: {"statusCode": 200, "body": "Hello!", "headers": {"bob": "this is bob"}}
Mon Jun 22 04:28:51 UTC 2020 : Method response headers: {X-Amzn-Trace-Id=Root=1-5ef03382-d494d01d575754f5b551dfd3;Sampled=0, Access-Control-Allow-Origin=*, Content-Type=application/json}
Mon Jun 22 04:28:51 UTC 2020 : Successfully completed execution
Mon Jun 22 04:28:51 UTC 2020 : Method completed with status: 200