[英]Data modified on AWS API Gateway Response body
我正在嘗試從我的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 \\ 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 \\ 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
如何解決這個問題?
上次我檢查它在文檔中不是很明確,但是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編碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.