在AWS API Gateway响应主体上修改的数据

时间:2016-08-11 13:10:44

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

我正在尝试从我的 AWS Lambda 函数返回十六进制字符串作为响应。当它到达客户端时,数据似乎被修改。

  • 数据:
    47 49 46 38 39 61 01 00 01 00 80 00 00 00 00 00
    ff ff ff 21 f9 04 01 00 00 01 00 2c 00 00 00 00
    01 00 01 00 00 08 04 00 03 04 04 00 3b

  • 十六进制超时数据(已发送数据):

    \ X47 \ X49 \ X46 \ X38 \ X39 \ X61 \ X01 \ X00 \ X01 \ X00 \ X80 \ X00 \ X00 \ X00 \ X00 \ X00"           “\ XFF \ XFF \ XFF \ X21 \ xf9 \ X04 \ X01 \ X00 \ X00 \ X01 \ X00 \ X2C \ X00 \ X00 \ X00 \ X00”           “\ X01 \ X00 \ X01 \ X00 \ X00 \ X08 \ X04 \ X00 \ X03 \ X04 \ X04 \ X00 \ X3B

  • 收到的数据
    47 49 46 38 39 61 01 00 01 00 c2 80 00 00 00 00
    00 c3 bf c3 bf c3 bf 21 c3 b9 04 01 00 00 01 00
    2c 00 00 00 00 01 00 01 00 00 08 04 00 03 04 04
    00 3b

    如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

上次我检查它在文档中不是很明确,但API网关实际上是为json(或类似)制作的,并且对路由映射中的二进制文件的支持是'但显然不是一个优先事项。它将发送的所有内容转换为utf-8。

将原始数据与收到的数据精确比较,您可以看到它:

47 49 46 38 39 61 01 00 01 00 80    00 00 00 00 00 ff    ff    ff    21 f9    04 01 00 00 01 00 2c 00 00 00 00 01 00 01 00 00 08 04 00 03 04 04 00 3b
47 49 46 38 39 61 01 00 01 00 c2 80 00 00 00 00 00 c3 bf c3 bf c3 bf 21 c3 b9 04 01 00 00 01 00 2c 00 00 00 00 01 00 01 00 00 08 04 00 03 04 04 00 3b 

0x7f以下的所有内容都是正常的,因为unicode代码点与编码字节(U + 0047 - > 47)相同,但是对于0x80或更高,出现问题:U + 0080 - > c2 80,U + 00FF - > c3 bf等等。

我们最近遇到了类似的问题:二进制数据在通过Gateway发送时损坏且更大,而不是直接访问我们的后端。这是因为很多字节被Unicode特殊的“替换字符”所取代。又名' U + FFFD' aka' 0xEF 0xBF 0xBD'。

如何解决?我们刚刚停止使用Gateway,但如果您能够承受更大的数据,则可以对其进行base64编码。