Connection: keep-alive的具体作用。

Connection: keep-alive这个属性,在什么时候设置比较好。比如说我一次请求了六个接口,那么就要简历六个长连接,这样会造成资源的浪费。

阅读 14.8k
1 个回答

Connection: Keep-Alive 是用于 HTTP持久连接 的字段。

在 HTTP 1.1 中 所有的连接默认都是持续连接,除非特殊声明不支持。目前服务器端默认为 5-15 秒,可以设置。

以你的例子:一次请求了六个接口
如果开启HTTP持久连接,则此 6 个请求走同一条 TCP 连接,走同一条 HTTP 流。5 秒之内的所有请求都复用此 TCP 连接。当 5秒钟之内没有其他请求后,此连接断开。(一条长连接)
如果不HTTP持久连接,则此 6 个请求需要发起 6 条 TCP 连接(包括三次握手等),HTTP 请求后立刻断开,TCP 连接根据 操作系统 的释放规则进行释放。(6 条短连接)

开启后的优点:TCP 连接数比较少,所以随之而来和 TCP 相关的优点全都来了。其实和 HTTP 没什么关系,主要是大幅降低服务器端因大量新建 TCP 连接造成的 CPU负载,以及 TCP 传输相关的拥塞控制问题。

开启后的缺点:这个协议是为 HTTP1.1 而存在的,已经不完全适合现有的网络状况。以前带宽小,瞬时请求高,所以用这个方法降低 TCP 新建。但现在带宽大,并发高。如果 HTTP 服务存在长轮训或较长间隔请求,而且超过 Keep-Alive 的设置(比如 Keep-Alive 5 秒,但轮训周期是 6 秒),则可能会造成大量的无用途连接,白白占用系统资源。

所以具体是否设置 Connection: Keep-Alive ,以及后续 Keep-Alive 的参数设置,需要根据你网站业务来合理规划。

PS: HTTP/2 没有这玩意,用的是更先进的直接基于TCP层次的连接管理。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题