关于 HTTP 中编码一点疑问

2021-12-13 09:52:58 +08:00
 yezheyu

在 HTTP2 协议中,数据是使用二进制传输。

对于这个二进制传输,我不太理解。

假设我给服务器发送的是文本消息:你好

在 HTTP1.1 中会在 head 中标注上:content-type: text/html; charset=UTF-8

然后 body 中把 "你好" 按 utf-8 编码表转成0x4F60(你) 0x597D(好)对应的一长串的二进制形式传输

"你好" 在网络上传输就是二进制传输,为啥不算二进制流?

是因为使用的是文本编码格式吗?

那在 HTTP2 中不使用文本格式编码,怎么处理 "你好" 呢?

是新制定一种编码格式吗?

比如我自定义一种 newCoding 编码:

你 ---> 01

好 ---> 10

在 head 中声明content-type: application/binary; newCoding

然后 body 中就直接发送01 10

我可以这样理解吗?

1501 次点击
所在节点    HTTP
3 条回复
monkeyWie
2021-12-13 10:07:56 +08:00
没错,http2 用了哈夫曼编码和你理解的这个意思差不多
monkeyWie
2021-12-13 10:10:50 +08:00
再补充下,body 是不会做编码映射的,因为 body 里的内容没有规则,只是 http 头之类的
coolzjy
2021-12-13 10:45:52 +08:00
header 中会使用霍夫曼编码或静态 /动态字典来压缩,但 body 中仍然与 http 一样,使用的是 text/gzip/brotli 编码 /压缩的内容。

所谓二进制,指的是二进制分帧。可以理解为 HTTP/1.x 中一个 HTTP 请求 /响应是不可再分的原子结构,一个请求没有结束时,UA 不可能再发起第二个请求(同一个连接上)。而 HTTP/2 中请求 /响应则可以被进一步拆解为二进制帧,不同请求的二进制帧可以交错传输,解决了队首阻塞的问题。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/821774

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX