HTTP1.X队头阻塞原理

HTTP1.X 队头阻塞(Head-of-line blocking)原因

在HTTP1.X协议中,是使用纯文本协议,
HTTP/1.1协议规定只有上一个请求得到响应后,才允许发出下一个请求。这暗示了响应的顺序需要与请求的顺序一致。

请求阻塞

(1)考虑以下场景:
客户端访问某一页面时,需要script.js和style.css文件。客户端按照先请求script.js,后请求style.css的顺序向服务端发起HTTP请求。假设客户端发起的script.js请求为 请求一,发起的style.css请求为请求二。考虑两种情况:
情况一: 客户端发送请求一之后,一直未收到响应,由于HTTP/1.1的规定,请求二也就无法发出,这就导致了请求二被阻塞。
情况二: 请求一的数据很大,导致时间过长,同样导致请求二被阻塞。
(2)解决方法:HTTP/1.1中可以应用管道技术来解决请求阻塞问题。
**管道(Pipelining)**技术,在同一个TCP连接中可以发送多个HTTP请求而不用等待上一个请求返回数据后,再发送下一个请求。虽然可以同时发送多个HTTP请求,但是服务器响应是按照请求的顺序进行响应的。

响应阻塞

(1)考虑以下场景:
在应用管道技术解决请求的阻塞问题后,客户端发送的请求不会被阻塞,但是服务器端需要按照请求的顺序发送响应数据包,假设服务器发送的script.js响应为响应一,发送的style.css响应为响应二同样考虑两种情况:
情况一: 服务端发送的响应一未到达客户端,那么客户端即使收到响应二也无法处理,这就导致响应二被阻塞。
情况二: 响应一的数据过大,发送响应一的时间过长,同样导致响应二被阻塞

所有的请求复用同一个Pipeling管道并行发送和处理多个请求,服务端可以处理多个并行请求,但是必须按照队列FIFO顺序(比如你向服务器发送了两个请求 GET /query?q=A 和 GET /query?q=B,服务器返回了两个结果,浏览器是没有办法根据响应结果来判断响应对应于哪一个请求的),这也就是队头阻塞。
(2)响应阻塞解决方法:
可以应用多路复用(Multiplexing) 技术来解决HTTP/1.1的队头阻塞问题,但是由于HTTP/1.1中,使用Content-Length字段来确定一个HTTP数据包的开始和结束,所以HTTP/1.1无法应用多路复用技术。因此,HTTP/2诞生了。

多路复用(Multiplexing)

多路复用是指在同一个链接上可以发送多个数据流,可以是多个请求-响应对,而每个流都有唯一标识流ID,会记录每个TCP数据包中流数据的长度,且每个流互相不受影响,这也避免HTTP1.X协议队头阻塞问题,这也是HTTP/2的基础。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值