美文网首页
HTTP的连接管理

HTTP的连接管理

作者: LegendGo | 来源:发表于2020-08-09 11:43 被阅读0次

HTTP的连接管理

短连接

HTTP 协议最初(0.9/1.0)是个非常简单的协议,通信过程也采用了简单的“请求 - 应答”方式,它底层的数据传输基于 TCP/IP,每次发送请求前需要先与服务器建立连接,收到响应报文后会立即关闭连接。
因为客户端与服务器的整个连接过程很短暂,不会与服务器保持长时间的连接状态,所以就被称为“短连接”(short-lived connections)。早期的 HTTP 协议也被称为是“无连接”的协议。

  1. 短链接的缺点
    • 在TCP协议里每次连接通常需要三次握手四次断开,HTTP 的一次简单“请求 - 响应”通常只需要 4 个包,如果不算服务器内部的处理时间,最多是 2 个 RTT。这么算下来,浪费的时间就是“3÷5=60%”,有三分之二的时间被浪费掉了。

长连接

针对短连接暴露出的缺点,HTTP 协议就提出了“长连接”的通信方式,也叫“持久连接”(persistent connections)、“连接保活”(keep alive)、“连接复用”(connection reuse)。
其实解决办法也很简单,用的就是“成本均摊”的思路,既然 TCP 的连接和关闭非常耗时间,那么就把这个时间成本由原来的一个“请求 - 应答”均摊到多个“请求 - 应答”上。

连接相关的头字段

由于长连接对性能的改善效果非常显著,所以在 HTTP/1.1 中的连接都会默认启用长连接。不需要用什么特殊的头字段指定,只要向服务器发送了第一次请求,后续的请求都会重复利用第一次打开的 TCP 连接,也就是长连接,在这个连接上收发数据。
当然,我们也可以在请求头里明确地要求使用长连接机制,使用的字段是Connection,值是“keep-alive”。
因为 TCP 连接长时间不关闭,服务器必须在内存里保存它的状态,这就占用了服务器的资源。如果有大量的空闲长连接只连不发,就会很快耗尽服务器的资源,导致服务器无法为真正有需要的用户提供服务。
所以,长连接也需要在恰当的时间关闭,不能永远保持与服务器的连接,这在客户端或者服务器都可以做到。
在客户端,可以在请求头里加上“Connection: close”字段,告诉服务器:“这次通信后就关闭连接”。服务器看到这个字段,就知道客户端要主动关闭连接,于是在响应报文里也加上这个字段,发送之后就调用 Socket API 关闭 TCP 连接。
服务器端通常不会主动关闭连接,通过Nginx可以设置一些关闭策略

  1. 使用“keepalive_timeout”指令,设置长连接的超时时间,如果在一段时间内连接上没有任何数据收发就主动断开连接,避免空闲连接占用系统资源。
  2. 使用“keepalive_requests”指令,设置长连接上可发送的最大请求次数。比如设置成 1000,那么当 Nginx 在这个连接上处理了 1000 个请求后,也会主动断开连接。

相关文章

  • 设计模式 -- 享元模式

    公用某些资源与数据库连接池,HTTP连接池很相似使用HTTP连接池管理长连接,可以复用HTTP连接,省去创建TCP...

  • http权威指南第四章

    连接管理 重点 http是如何使用tcp连接的; tcp连接的时延、瓶颈以及存在的障碍 http的优化包括并行连接...

  • HttpClient 总结

    采用Http连接池的方式,管理http的连接,这样可以减少每次请求创建、关闭连接的时间。用httpclient工具...

  • HTTP & Socket

    HTTP HTTP连接管理 HTTP连接的过程 HTTP事务的时延 原因: 客户端首先需要根据URI确定Web服务...

  • HTTP 连接管理

    HTTP 是如何使用TCP连接的 TCP连接的时延,瓶颈以及存在的故障 HTTP 的优化,包括并行连接,keep-...

  • HTTP连接管理

    Blog: HTTP连接管理 曾经有同事给我说有客户问她我们的产品是否支持长连接,听到这问题,我告诉她长连接可以通...

  • HTTP连接管理

    Http事务的时延:(1)TCP建立连接握手(2)TCP慢启动拥塞控制(3)数据聚集的Nagle算法(4)用于捎带...

  • HTTP连接管理

    1. HTTP网络协议栈在HTTP客户端向服务器发送报文前,需要IP地址和端口在客户端和服务器之间建立一条TCP/...

  • HTTP连接管理

    概要 本文主要讲解目前用于提高HTTP连接的常用手法(内容是对HTTP权威指南的总结)。要解决如何提高HTTP效率...

  • HTTP的连接管理

    HTTP的连接管理 短连接 HTTP 协议最初(0.9/1.0)是个非常简单的协议,通信过程也采用了简单的“请求 ...

网友评论

      本文标题:HTTP的连接管理

      本文链接:https://www.haomeiwen.com/subject/otsldktx.html