HTTP请求体可以有很多种类型,比如JSON、protobuf等
我想知道body的顺序是否有保证。
例如,如果客户端通过 HTTP 正文发送 JSON
{"a": 1, "b": 2}
,服务器是否可以使用另一个订单接收 JSON:{"b": 2, "a": 1}
。
关于 protobuf 的同样问题。
我尝试过Postman和Python HTTP服务器,似乎顺序是有保证的,但我不知道是否有例外。我需要知道这一点,因为我想让客户端计算 HTTP 请求正文的 MD5,以便在服务器端进行一些检查。如果不能保证顺序,那么MD5显然是不可靠的。
对于protocolbuf来说,由于它使用二进制编码,因此可以保证字段的顺序,因此您可以放心地生成md5校验和。
但是对于 json 来说并不总是能保证,这里是来自官方 json 文档的参考,以供参考,说明 json 对象是无序集合,并且接收这些对象的软件的行为是不可预测的:
https://tools.ietf.org/html/rfc8259#section-4
但是大多数 json 解析器都会为您处理这个问题,但是为了进行额外的检查,您始终可以在实际生成校验和之前对 json 对象的键进行排序。