HTTP 2.0
HTTP 1.1 在应用层以纯文本的形式进行通信,HTTP1.1虽然它是个长连接,但在连接中发送的多个请求还是会顺序处理。这样的话一旦有一个请求处理很久的话,那后面的请求就会被阻塞,在实时性、并发性上都存在问题。
为了解决这些问题,HTTP 2.0 会对 HTTP 的头进行一定的压缩,将原来每次都要携带的大量 key value 在两端建立一个索引表,对相同的头只发送索引表中的索引。
此外,HTTP 2.0 协议将一个 TCP 的连接中,切分成多个流,每个流都有自己的ID,而且流可以是客户端发往服务端,也可以是服务端发往客户端。它其实只是一个虚拟的通道。流是有优先级的。
HTTP 2.0 还将所有的传输信息分割为更小的消息和帧,并对它们采用二进制格式编码。常见的帧有Header帧,用于 Header 内容,并且会开启一个新的流。再就是Data帧 ,用来传输正文实体。多个Data帧属于同一个流。
通过这两种机制,HTTP 2.0 的客户端可以将多个请求分到不同的流中,然后将请求内容拆成帧,进行二进制传输。这些帧可以打散乱序发送,然后根据每个帧首部的流标识符重新组装,并且可以根据优先级,决定优先处理哪个流的数据。
一个页面要发送三个独立的请求,一个获取CSS,一个获取JS,一个获取图片JPG。如果使用 HTTP 1.1就是串行的,但是如果使用 HTTP 2.0 ,就可以在一个连接里,客户端和服务端都可以同时发送多个请求或回应,而且不用按照顺序一对一对应。
HTTP 2.0 其实将三个请求变成三个流,将数据分成帧,乱序发送到一个 TCP 连接中。
HTTP 2.0 成功解决了 HTTP 1.1 的队首阻塞问题,同时,也不需要通过 HTTP 1.x 的 pipeline 机制用多条 TCP 连接来实现并行请求与响应;减少了 TCP 连接数对服务器性能的影响,同时将页面的多个数据 CSS、JS、JPG等通过一个数据链接进行传输,能够加快页面组件的传输速度。