Connection: keep-alive这个属性,在什么时候设置比较好。比如说我一次请求了六个接口,那么就要简历六个长连接,这样会造成资源的浪费。
Connection: keep-alive这个属性,在什么时候设置比较好。比如说我一次请求了六个接口,那么就要简历六个长连接,这样会造成资源的浪费。
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
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层次的连接管理。