HTTP的持久化连接和管线化

什么是持久化连接

所谓持久化连接(长连接),就是当 http 建立了连接通信后,TCP 连接不断开,下次请求可以直接使用,无需再创建 TCP 连接。
持久接的特点是,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态。

为什么要用长连接

发出请求时需要创建 TCP 连接,但是创建 TCP 连接需要三次握手;
因为页面上只有一两个请求的页面很少,如果每个请求都创建自己的 TCP 连接,每个都要重复的建立和断开,这非常的浪费服务端资源,并且请求响应时间也相对较长。
在这种情况下,长连接就应运而生了。
HTTP/1.1 中默认都是长连接,TCP 连接创建后,后面的请求都会使用已创建的 TCP 连接。从而减轻服务端的负载,提高响应时间,加快页面显示速度。

###管线化
所谓管线化,就是不用等待响应可直接发送下一个请求。
持久连接使得多数请求以管线化( pipelining)方式发送成为可能。从前发送请求后需等待并收到响应, 才能发送下一个请求。管线化技术出现后,不用等待响应可直接发送下一个请求。
这样就能够做到同时并行发送多个请求, 而不需要一个接一个地等待响应了。

  • 管线化机制通过持久化连接完成,仅 HTTP/1.1 支持此技术
  • 只有 GET 和 HEAD 请求可以进行管线化,而 POST 则有所限制
  • 初次建立连接时不应启动管线化机制,因为对方(服务器)不一定支持 HTTP/1.1 版本
  • 管线化不会影响响应到来的顺序,响应的返回顺序并未发生改变
  • HTTP/1.1 要求服务器端支持管线化,但并不要求服务器端也对响应进行管线化处理,只是要求管线化的请求不失败即可。
  • 由于上面提到的服务端问题,开启管线化很可能并不会带来大幅度的性能提升,而且很多服务器端和代理程序对管线化的支持并不友好,因此现代浏览器如 Chrome 和 Firefox 默认并未开启管线化支持。
文章作者: wenmu
文章链接: http://blog.wangpengpeng.site/2020/01/09/HTTP%E7%9A%84%E6%8C%81%E4%B9%85%E5%8C%96%E8%BF%9E%E6%8E%A5%E5%92%8C%E7%AE%A1%E7%BA%BF%E5%8C%96/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 温木的博客
微信打赏