Open
Description
HTTP/2的多路复用
http/2最大的特点是使用多路复用,对同一个域的服务器只建立一次TCP连接,加载多个资源,使用二进制帧传输,同时会对http头部进行压缩。
在 HTTP/1 中,每次请求都会建立一次HTTP连接(3次握手4次挥手),请求过程中占用了相当长的时间,即使开启了 Keep-Alive ,解决了多次连接的问题,但是依然有两个效率上的问题:
- “串行”文件传输。当请求a文件时,b文件只能等待,等待a连接到服务器、服务器处理文件、返回文件。
- 连接数过多。超过服务器能承载的最高并发,就需要等待前面某个请求处理完成。
HTTP/2的多路复用就是为了解决上述的两个性能问题,引入帧和流。多路复用,就是在一个 TCP 连接中可以存在多条流。换句话说,也就是可以发送多个请求,对端可以通过帧中的标识知道属于哪个请求。
HTTP/2 复用 TCP 连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应。
帧代表着最小的数据单位,每个帧会标识出该帧属于哪个流,流也就是多个帧组成的数据流。
多路复用的意义在于可以用同一个连接传输多个资源,故之前HTTP1.1的优化就没必要了,比如使用雪碧图、合并JS、CSS等减少请求数。
在http 1.1时代,由于需要建立多个TCP连接,服务器需要更多的线程来处理请求,同样地,浏览器也需要,所以浏览器会限制同一个域的同时请求数。