JSON 数据如何通过 HTTP 按字节方式传输

How is JSON data transmitted byte wise via HTTP

由于 HTTP 是一种文本协议,因此我假设对于所有 MIME 类型,HTTP 正文通常都由文本组成。这意味着对于 JSON,所有数字都将表示为每个字符 1 个字节而不是 8 个字节的文本。

例如用于传输此 JSON:

{ num: 0.123456789 }

它会单独为数值传输11个字节。

这是正确的还是针对不同的 MIME 类型,特别是 HTTP 中的 JSON 优化了字节表示?

我建议您将它们作为字符串发送;它将花费您 1 个字节的字符,并且不会受到其他系统精度的影响。

HTTP 是基于文本的协议,但这主要是关于消息的 Headers 部分。然后 headers 应该定义 body 大小(通过 Content-Length 例如,使用 'Transfer-Encoding: chunked` 模式,这有点复杂),这个大小是字节大小。

body 内容可以包含任何字节,如果需要,甚至可以包含 NULL 字节,对于 HTTP 代理,body 只是一个 n 字节长的 blob。

这个 body 甚至可以压缩(通过 gzip 或 deflate),然后这个信息也存储在 headers 上。

因此,以 UTF-8 或任何其他非 ascii7 格式(如所有 iso-* 格式)向您传输 json 没有问题。

就 body 的大小而言,像 UTF-8 这样的东西不会成为 'every byte bigger',因为像数字这样的简单内容实际上是 1 字节长的字符,即使在 UTF- 8.如果您想知道消息的大小,真正重要的设置是 HTTP 服务器可以在 body.

上应用的压缩格式

HTTP 可以很好地发送二进制数据,有两种方法可以特别优化它:

  1. 您可以切换到不是 JSON 但与 JSON 基本兼容的二进制编码。 CBOR 就是一个例子。
  2. 您可以 gzip 或 brotli 压缩 JSON。浏览器透明地支持这一点。

选项 2 是目前为止最简单的,实际上可以让您物超所值。但选项1通常在发送字节的效率上胜出,可以与2结合使用。