通信--历代HTTP的多路复用

121 阅读1分钟
  • http/1.0

如需要发送多个请求必须创建多个 TCP 连接,并且浏览器对于单域名请求有数量限制(一般6个),其连接无法被复用。若想复用则需使用 Connection: keep-alive。但即使这样,也必须等上一个请求接受才能发起下一个请求,也就是说前面的请求会阻塞后面的。

  • http/1.1

默认开启 Connection: keep-alive,同时引入了流水线机制。使用 pipe-line 可以连续发送一组没有相互依赖的请求而不必等到上一个请求先结束,但请求响应的顺序必须和请求发送的顺序一致,如果中间有某个响应花了很长的时间,后面的响应就算已经完成了也要排队等阻塞的请求返回,这就是线头阻塞。

  • http/2

采用二进制格式传输,取代了 http/1.x 的文本格式,二进制格式解析更高效。同域名下所有通信都在单个连接上完成,消除了因多个 TCP 连接而带来的延时和内存消耗。而且单个连接上可以并行交错的请求和响应,之间互不干扰。