全文共881字,预计耗时4分钟

HTTP2.0

二进制分帧

在应用层(HTTP)和传输层(TCP)增加了一个二进制分帧层。

  • : HTTP2.0通信的最小单位,所有帧共享一个8字节的首部,其中包含帧的长度、类型、标志、还有一个保留位,且至少有标识出当前所属的流的标识符,帧承载着特定类型的数据,如HTTP首部、负荷等等。
  • 消息: 比帧大的通讯单位,是指逻辑上的HTTP消息,比如请求、响应等。由一个或多个帧组成。
  • : 比消息大的通讯单位,是TCP连接中的一个虚拟通道,可以承载双向的消息。每个流都有一个唯一的整数标识符。

什么是二进制分帧层

在二进制分帧层上,HTTP2.0会将所有传输信息分割为更小的消息和帧,并对它们采用二进制格式的编码将其封装。
其中,HTTP1.X中的首部信息header封装到Headers帧中,而requestBody将被封装到Data帧中。

如何运行

HTTP2.0通信都在一个TCP连接上完成,这个连接可以承载任意数量的双向数据流,相应的每个数据流以消息的形式发送。
而消息又由一个或多个帧组成,这些帧可以乱序发送,然后根据每个帧首部的流标识重新组装。

意义

它为HTTP2.0的其它特性提供了基础,通过把数据划分为更小更便捷的数据以达到多路复用。另一方面,减少了TCP链接数,改善了网络拥塞状态。其次,慢启动时间减少,使得拥塞和丢包恢复的速度更快

首部压缩

HTTP2.0通过HPACK算法压缩首部。

原理

在客户端和服务端直接使用首部表来跟踪和存储之前发送的键值对。
请求与响应首部的定义基本没有变,只是所有首部键必须全部消息,且不再有起始行,起始行独立为:method:scheme:host:path这些键值对。

如何运行

对于相同的数据,不再重新通过每次请求和响应发送。
每个新的首部键值对要么追加到当前表的末尾,要么替换表中当前的值。
首部表在HTTP2.0的链接存续期内始终存在,由客户端和服务端共同渐进的更新。

意义

使得报头更紧凑,更快速地传输。减少每次通讯数据量,使得网络拥塞状态得以改善。

多路复用

在HTTP1.1中,浏览器客户端同一时间,针对同一域名下的请求有一定的数量限制。超过限制数目的请求会被阻塞。
而HTTP2.0中,多路复用则优化了这一性能。

原理

基于二进制分帧层,HTTP2.0可以在共享TCP链接的基础上同时发送请求和响应,HTTP消息被分解为独立的帧,而不破坏消息本身的语义,交错发出去,在另一端根据流标识符和首部将它们再重新组装起来。

意义

  • 消除不必要的延迟
  • 不必再为绕过HTTP1.x限制而做很多额外的工作

服务端推送

服务端根据客户端的请求,提前返回多个响应,推送额外的资源给客户端。这将可以加快页面响应速度并提高用户体验。

Loading...