TCP队头阻塞和HTTP队头阻塞
2021-03-21 10:26
标签:control 避免 原因 数据 没有 模式 并发 不能 strong 1. TCP队头阻塞 TCP数据包是有序传输,中间一个数据包丢失,会等待该数据包重传,造成后面的数据包的阻塞。 2. HTTP队头阻塞 http队头阻塞和TCP队头阻塞完全不是一回事。 http1.x采用长连接(Connection:keep-alive),可以在一个TCP请求上,发送多个http请求。 有非管道化和管道化,两种方式。 非管道化,完全串行执行,请求->响应->请求->响应...,后一个请求必须在前一个响应之后发送。 管道化,请求可以并行发出,但是响应必须串行返回。后一个响应必须在前一个响应之后。原因是,没有序号标明顺序,只能串行接收。 管道化请求的致命弱点: 1. 会造成队头阻塞,前一个响应未及时返回,后面的响应被阻塞 由于这个原因,目前大部分浏览器和Web服务器,都关闭了管道化,采用非管道化模式。 无论是非管道化还是管道化,都会造成队头阻塞(请求阻塞)。 解决http队头阻塞的方法: 1. 并发TCP连接(浏览器一个域名采用6-8个TCP连接,并发HTTP请求) 2. HTTP2方式 http2使用一个域名单一TCP连接发送请求,请求包被二进制分帧,不同请求可以互相穿插,避免了http层面的请求队头阻塞。 TCP队头阻塞和HTTP队头阻塞 标签:control 避免 原因 数据 没有 模式 并发 不能 strong 原文地址:https://www.cnblogs.com/mengff/p/12724641.html
2. 请求必须是幂等请求,不能修改资源。因为,意外中断时候,客户端需要把未收到响应的请求重发,非幂等请求,会造成资源破坏。
2. 域名分片(多个域名,可以建立更多的TCP连接,从而提高HTTP请求的并发)
但是不能避免TCP层面的队头阻塞。
上一篇:ajax 入门