HTTP请求体的顺序是否保证

问题描述 投票:0回答:1

HTTP请求体可以有很多种类型,比如JSON、protobuf等

我想知道body的顺序是否有保证。

例如,如果客户端通过 HTTP 正文发送 JSON

{"a": 1, "b": 2}
,服务器是否可以使用另一个订单接收 JSON:
{"b": 2, "a": 1}

关于 protobuf 的同样问题。

我尝试过Postman和Python HTTP服务器,似乎顺序是有保证的,但我不知道是否有例外。我需要知道这一点,因为我想让客户端计算 HTTP 请求正文的 MD5,以便在服务器端进行一些检查。如果不能保证顺序,那么MD5显然是不可靠的。

json http protocol-buffers md5
1个回答
0
投票

对于protocolbuf来说,由于它使用二进制编码,因此可以保证字段的顺序,因此您可以放心地生成md5校验和。

但是对于 json 来说并不总是能保证,这里是来自官方 json 文档的参考,以供参考,说明 json 对象是无序集合,并且接收这些对象的软件的行为是不可预测的:

https://tools.ietf.org/html/rfc8259#section-4

但是大多数 json 解析器都会为您处理这个问题,但是为了进行额外的检查,您始终可以在实际生成校验和之前对 json 对象的键进行排序。

© www.soinside.com 2019 - 2024. All rights reserved.