Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

77.HTTP/2的多路复用 #77

Open
neptoo opened this issue Nov 14, 2019 · 0 comments
Open

77.HTTP/2的多路复用 #77

neptoo opened this issue Nov 14, 2019 · 0 comments

Comments

@neptoo
Copy link
Owner

neptoo commented Nov 14, 2019

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连接,服务器需要更多的线程来处理请求,同样地,浏览器也需要,所以浏览器会限制同一个域的同时请求数。

参考文章

简单讲解一下 http2 的多路复用

怎样把网站升级到http/2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant