本文声称二进制帧层成为http中TCP连接多路复用的基础,这让我感到困惑。
https://developers.google.com/web/fundamentals/performance/http2#design_and_technical_goals
令人困惑的是,HTTP客户端可以在一个TCP连接中发送更多请求,而无需等待响应并接收相应请求的响应。那就是“框架”是请求和回应。那么它为什么要添加二进制帧呢?
发布于 2022-01-13 10:16:42
让我们看看你的建议:
客户端可以在一个TCP连接中发送更多请求,而无需等待响应。
到目前为止,很好:我可以在同一个连接上发送"GET /foo“,然后立即"GET /bar”。
并接收对应请求的响应。
因此,服务器用一些HTML内容回复"200 OK“,并且.等等,是"/foo“还是"/bar"?在你自己的描述中,关键词是“对应的”--我们需要某种方式来表达“这个回应对应于请求#1”。
然后,在发送第一个响应的过程中,服务器完成了对另一个请求的处理,并准备发送部分不同的响应;但是,如果它跳入"200 OK",这将似乎是它已经发送的响应的一部分。因此,我们还需要能够说“这是一个新响应的开始”,以及“这个内容是响应#2的延续”。
要做到这一点,我们需要一个新的抽象:一个框架,它的头部可以编码细节,比如“接下来的100个字节是响应#2的开始,它对应于请求#1”。(我不确定HTTP/2框架是否就是这样工作的,但我认为这是一个粗略的原则。)
我们可以这样做,并且仍然保持协议的人类可读性(这就是我们所说的“基于文本的”与“二进制”的真正含义),但是会有很多这样的帧头,所以我们可以使它们变得越短,越好。因此,如果我们对性能感兴趣,我们可以放弃将“人类可读性”作为一种要求,而最终得到一个像HTTP/2这样的二进制框架协议。
https://stackoverflow.com/questions/70694652
复制相似问题