【问题标题】:Data modified on AWS API Gateway Response body在 AWS API Gateway 响应正文上修改的数据
【发布时间】:2016-08-11 13:10:43
【问题描述】:

我正在尝试从我的 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

    如何解决这个问题?

【问题讨论】:

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


    【解决方案1】:

    上次我检查它在文档中不是很明确,但 API Gateway 确实是为 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 等等。

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

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

    【讨论】:

      猜你喜欢
      • 2019-10-25
      • 2018-05-02
      • 2022-10-14
      • 2016-04-16
      • 2023-02-19
      • 2018-06-09
      • 1970-01-01
      • 2018-07-06
      • 2016-12-15
      相关资源
      最近更新 更多