高级前端http【Q149】什么是队首阻塞,如何解决,原理如何

什么是队首阻塞,如何解决,原理如何

Issue 欢迎在 Gtihub Issue 中回答此问题: Issue 150

Author 回答者: yuzd

队首阻塞包含http应用层协议上的队首阻塞和tcp传输层的队首阻塞

  1. http应用层协议上的队首阻塞: 以http1.1为例,一个tcp连接一次只能处理一个请求,如果接受端处理慢的话,后面的请求就得排队,这是导致队首阻塞的根本原因 虽然http1.1提出了管线技术,支持同时发起多个请求出去,但是又限制了接收端返回必须得按照顺序,所以这项技术也未能解决队首阻塞。

http2.0 提出了 frame 和 stream的概念, 把请求数据分成了不同的二进制frame,有strameid标识,包装进不同的stream通过同一个tcp管道进行并发的多路复用传输, 接收端根据streamid来进行组装,解决了队首阻塞的问题。

但是依然没有解决tcp传输层的队首阻塞,如果过程中一个包丢了,需要重传,就需要后面的包等待了