gpt4 book ai didi

http - 为什么说 HTTP2 是二进制协议(protocol)?

转载 作者:行者123 更新时间:2023-12-03 14:49:38 25 4
gpt4 key购买 nike

我刚刚阅读了一篇关于 之间差异的文章http1 http2 ,但我的主要问题是当它说 http2 是二进制协议(protocol) 但是 http1 是文本协议(protocol) .
也许我错了,但我知道任何数据都是,文本或任何格式,它可以在内存中具有二进制表示形式,即使通过 TCP/IP 网络传输,数据也会根据层(OSI 模型或 TCP/IP 模型表示),这意味着在技术上 文字 格式在通过网络传输数据的上下文中不存在。
所以我不能真正理解http2和http1之间的这种区别,你能帮我解释一下吗?

最佳答案

二进制可能是一个令人困惑的术语 - 在计算机的某个时刻,一切最终都是二进制的!
HTTP/2 具有高度结构化的格式,其中 HTTP 消息被格式化为数据包(称为帧),并且每个帧都分配给一个流。 HTTP/2 frames have a specific format ,包括在每帧开始时声明的长度和帧头中的各种其他字段。在许多方面,它就像一个 TCP 数据包。读取一个 HTTP/2 帧可以遵循一个定义的过程(前 24 位是这个数据包的长度,后面是 8 位定义帧类型......等等)。在帧头之后是有效负载(例如 HTTP header 或正文有效负载),这些也将采用预先已知的特定格式。 HTTP/2 消息可以在一帧或多帧中发送。
相比之下,HTTP/1.1 是一种非结构化格式,由 ASCII 编码的文本行组成 - 所以是的,它最终以二进制形式传输,但它基本上是一个字符流,而不是专门分成单独的片段/帧(除了行) . HTTP/1.1 消息(或至少第一个 HTTP 请求/响应行和 HTTP header )通过一次读取一个字符来解析,直到到达新的行字符。这有点困惑,因为您事先不知道每行有多长,因此您必须逐个字符地处理它。在 HTTP/1.1 中,HTTP 正文的长度处理稍有不同,通常提前知道为 content-length。 HTTP header 将对此进行定义。 HTTP/1.1 消息必须作为一个连续的数据流完整地发送,并且连接不能用于其他任何事情,只能传输该消息直到它完成。
HTTP/2 带来的好处是,通过将消息打包到特定的帧中,我们可以混合消息:这里有一些请求 1,这里有一些请求 2,这里有一些请求 1……等等。在 HTTP/1.1 这是不可能的,因为 HTTP 消息没有包装到数据包/帧中,这些数据包/帧标记有一个 id 来表明它属于哪个请求。
我有一张图表here和动画版here这有助于更好地概念化这一点。

关于http - 为什么说 HTTP2 是二进制协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58498116/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com