队头阻塞
Q: 什么是队头阻塞?
A: 队头阻塞分以下两种:
-
TCP 队头阻塞:TCP 数据包是有序传输,中间一个数据包丢失,会等待该数据包重传,造成后面的数据包的阻塞。
-
HTTP 队头阻塞:HTTP 遵守“请求-响应”的模式,也就是客户端每次发送一个请求到服务端,服务端返回响应。但有一个致命缺陷那就是页面中有多个请求,每个请求必须等到前一个请求响应之后才能发送,并且当前请求的响应返回之后,当前请求的下一个请求才能发送。此时如果有一个请求响应慢了,会造成后面的响应都延迟。 为了提高速度 和效率,在持久连接的基础上,HTTP1.1 进一步地支持在持久连接上使用管道化(pipelining)特性。管道化允许客户端在已发送的请求收到服务端的响应之前发送下一个请求,借此来减少等待时间提高吞吐,如果多个请求能在同一个 TCP 分节发送的话,还能提高网络利用率。 同一个 tcp 连接中可以同时发送多个 http 请求,也就是并发,但是在响应的时候,必须排队响应,谁先到达的谁先响应,相比不支持管道化的 http 请求确实提高了效率,但是还是有局限性,加入其中某个响应因为某种原因延迟了几秒,后面的响应都会被阻塞。