当前位置: 首页 > 知识库问答 >
问题:

在AWS API网关中使用AWS Lambda响应体映射多个超文本传输协议响应标头

陆英毅
2023-03-14

我可以通过api网关集成响应头映射设置单个http响应头
在这种情况下,我给出了上下文。失败(“http://www.google.com“”来自aws lambda的响应,并使用regex(“.http.”)识别响应并最终将其映射到我的标题,如下所示
位置:集成。回答身体错误消息
当我试图一次映射一个标题时,这就起作用了
但是我想在一个响应中同时设置位置和Cookie头。为了实现这一点,我从aws lambda-like返回了一个json

context.fail(JSON.stringify({Location:"http://www.google.com",Cookie: vid="233kwer34343"})) 

但是我不能通过integration.response.body.error消息映射标头。位置integration.response.body.error消息。Cookie

通过使用上下文可以做到这一点。succeed()而不是上下文。fail()。但这不是检查正则表达式。我想检查regex以对响应进行分类。

从lambda响应体映射多个响应头的最佳方法是什么?

共有2个答案

微生恩
2023-03-14

我不认为你可以使用context.fail.问题是传递给context.fail的参数是一个简单的字符串。然后,该字符串被编码成一个json字符串,然后作为名为“错误消息”的属性中的一个sth值传递给API网关。

来自Lambda的响应正文看起来像这样:{"错误消息": "{\"位置\":\"http://www.google.com\",\"Cookie\":\"vid='233kwer34343'\"}"}

请注意,错误消息的值是一个特殊字符转义的字符串,而不是一个json对象。没有办法告诉头映射在integration.response.body.errorMessage中查找,将该字符串解析为json,并获取结果json对象的位置属性。

如果以响应体的形式返回值,而不是以标题的形式返回值,那么您可以使用速度来解析错误消息的内容,并将其转换为您喜欢的任何响应体。不幸的是,头映射没有速度模板的全部处理能力/灵活性。

为什么需要调用上下文。在这种情况下失败了吗?

如果你调用上下文。完成后,您可以返回json作为正文,如:{“Location”:http://www.google.com“,“Cookie”:“vid='233kwer34343'”

然后头映射只是integration.response.body.位置和integration.response.body.Cookie

乔丁雨
2023-03-14

这不是因为API网关或多个标头。请注意,位置标头将仅添加到请求重定向(3xx)或成功处理(2xx)的响应中。当返回代码为错误(4xx、5xx)等时,将不添加该代码。

更多详情请参阅-https://en.wikipedia.org/wiki/HTTP_location

这就是它在上下文中起作用的原因。succeed(),它在上下文中不起作用。失败()。

 类似资料:
  • 我想知道你对这个概念的看法/意见。如果有替代方案?这是否可行/有益? 据我所知,对于每个http请求,服务器都会执行一些操作并返回http响应。 现在考虑任何场景,我们希望对服务器上运行的进程有更多的控制。 情景1:http请求发送- 在这里,资源被浪费了。 情况2:http请求发送- 在这里,客户端不知道服务器中运行的进程的状态。客户端必须等待,直到它获得超文本传输协议响应。 我的想法是:在初始

  • 我只是有一个关于服务中http请求的结构和处理响应的问题。我正在使用Angular2。alpha46 Typescript(刚刚开始测试-我喜欢它…Ps…。感谢所有一直致力于它并通过github作出贡献的人) 因此,采取以下措施: 登录表单。组成部分ts 从这个组件中,我导入了我的userService,它将容纳我的超文本传输协议请求,以登录用户。 使用者服务ts 我想做的是能够处理http请求之

  • 我的LogCat: 签名密钥(sw)为https://api.dropbox.com/1/shares/dropbox/a.jpg?oauth_consumer_key=2f2y1dyuqhp58ek 我对http没有太多经验。。 因为httpPost=新的httpPost(sw);工作正常,这是否意味着基本字符串签名正确? 还是我错过了什么?

  • 我正在努力学习一些关于HTTP的基础知识。我检查了一些HTTP响应头,注意到了两件让我困惑的事情: > 没有缓存控制标头,并且 ETag标头存在。 我理解 ETag 的方式是,客户端将 ETag 中的请求发送到缓存,并且缓存将资源 Etag 与服务器重新验证。但是,如果没有缓存控制标头作为响应,则所有后续请求都直接与服务器进行重新验证并完全省略缓存。是这种情况还是我错过了什么?当响应中不存在缓存控

  • 我正在使用下面的代码登录apiendpoint并从中检索数据,但响应似乎已编码,我无法读取内容。我正在使用request-requestes-0.0.1 当我在控制台上打印相同的响应 有人能告诉我如何解码和读取响应中的数据吗

  • 我有这个问题: 我需要从服务器下载一个zip文件,这个zip包含。xod和。巴布亚新几内亚。我正在使用AngularJS,JavaSpring,来克服跨域问题,我的htt。获取java spring控制器的角度调用,它将进行真正的get调用。我必须下载zip- 这是我的角度代码: 这是java spring代码: 这是控制台。日志: Object{data:"UEsDBBQACAAIAA5Ipkg