请求队列
HTTP/1.
在HTTP/1.1协议中,浏览器对每个域名的并发连接数有默认限制。这个限制通常是6个,但不同浏览器可能会有所不同。具体来说:
- 并发连接数限制:浏览器在同一时间内对每个域名只能并行发送6个请求。这6个请求可以是任何类型的资源请求,包括HTML、CSS、JavaScript、图片等。
- 请求队列:当超过6个请求时,浏览器会将多余的请求放入队列中,等待前面的请求完成后再依次发送。这个队列机制确保了请求的有序处理,避免了过多的并发请求导致的网络拥塞和资源浪费。
示例:
假设一个页面需要加载10个资源,每个资源都在同一个域名下。浏览器会首先并行发送6个请求,其余4个请求会被放入队列中。当其中一个请求完成后,队列中的一个请求会被发送出去,如此循环,直到所有请求都完成
HTTP/2:
HTTP/2协议引入了多路复用(Multiplexing)技术,允许在一个连接上并行处理多个请求。这大大减少了连接的开销和延迟,提高了请求的处理效率。具体来说:
- 多路复用:HTTP/2允许多个请求和响应在同一TCP连接上并行传输。这意味着即使在同一时间内发送多个请求,也不会因为连接数的限制而阻塞。
- 头部压缩:HTTP/2使用HPACK压缩算法来压缩请求和响应的头部信息,减少了头部信息的传输开销。
- 服务器推送:HTTP/2支持服务器推送(Server Push)技术,服务器可以在客户端请求之前主动推送相关资源,进一步减少请求的往返时间。
示例:
假设一个页面需要加载10个资源,每个资源都在同一个域名下。在HTTP/2协议下,浏览器可以一次性并行发送所有10个请求,而不需要等待前面的请求完成。服务器会并行处理这些请求,并通过同一个连接将响应返回给浏览器。
详细解释
HTTP/1.1 的并发连接限制
1.并发连接数:
- Chrome:6个
- Firefox:6个
- Safari:6个
- Edge:6个
- Internet Explorer:6个
2.请求队列
- 当请求超过并发连接数限制时,浏览器会将多余的请求放入队列中。
- 队列中的请求会按照先进先出(FIFO)的原则依次发送。
- 这种机制确保了请求的有序处理,避免了过多的并发请求导致的网络拥塞和资源浪费
HTTP/2 的多路复用
1.多路复用:
- 并行传输:多个请求和响应可以在同一TCP连接上并行传输,而不必等待前面的请求完成
- 减少延迟:由于多个请求可以并行处理,减少了请求的往返时间,提高了页面加载速度。
- 资源利用:减少了建立和关闭连接的开销,提高了网络资源的利用率。
2.头部压缩:
- HPACK算法:HTTP/2使用HPACK压缩算法来压缩请求和响应的头部信息,减少了头部信息的传输开销。
- 提高效率:压缩后的头部信息更小,传输更快,提高了请求的处理效率。
3.服务器推送
- 主动推送:服务器可以在客户端请求之前主动推送相关资源,进一步减少请求的往返时间
- 优化加载:通过服务器推送,可以提前加载关键资源,提高页面的加载速度和用户体验。