一分钟了解 Keep-Alive

默认的HTTP连接(connection)通常都会在每次request完成后就关闭掉,这也就意味着server端会在发送了一个response之后就把TCP 连接(connection)close掉。为了能够让connection在多次请求中保持open,就引入了keep-alive connection,也就是长连接,也可以叫persistent connection(持续连接)。ps:以下统称长连接。

只要server端愿意配合,所有现代浏览器都可以使用长连接。你也可以直接使用HTTP/1.1,它的Keep-Alive实现有点不同,就是connection是默认是一直保持open的状态,除非response中包含“Connection: close”的header。

没有Keep-Alive的情况下HTTP是如何工作的

客户端去创建一个新的connection来交互并且接收到来自server的一个文件。客户端使用一个新的connection来发起一次请求(request),在接收到文件后就会终止。浏览器解析response,然后检查是否还有其他的必须的文件来辅助显示整个网页(比如js、css、图片等等)。经过分析后,它会对每个这些文件分别创建新的连接去发起请求来获取,但这种机制是非常低效的,特别是对于那种有大量元素(element)的网页。

使用Keep-Alive之后

使用了Keep-Alive之后,客户端会重用现存的connection,而不是每次都去重新创建一个新的connection。

使用Keep-Alive的好处

更低的CPU和内存使用(因为在同一时间打开的连接更少了)。

可以让HTTP对request和response实现pipeline。

减少了网络堵塞(TCP连接更少了)。

request的延迟降低了(第一次握手之后就不需要握手了)。

在不需要关闭TCP连接的情况下就可以告知errors。

这些优势对于安全的HTTPS连接更为重要,因为建立安全连接需要更多的CPU时间和网络往返(round-trips)。

影响Keep-Alive功能的几个属性

这里仅列举Apache的配置:

KeepAlive

使用 “KeepAlive On” 来开启。

如果要关闭,就使用 “KeepAlive Off”。

MaxKeepAliveRequests

这个属性负责设置每个Keep-Alive连接所允许的最大请求数。

一般设置100对于大多数场景就够了。但是,具体还得取决于一个网页所依赖的file有多少,随着file的增加而调整此值。

KeepAliveTimeout

这个属性就是为了避免一个闲置的连接空闲太长时间。具体就是你的server需要等待下一个新的客户端request多长时间。如果等了指定时长还是没有新的request那么就关闭了。

一旦在规定的时间内客户端发过来新的请求,那么这个timeout又开始重新计算。

总之

总之,我们可以看到HTTP Keep-Alive在我们的应用程序性能提升方面起到了关键的作用。我们应该把它利用起来而不是使用默认的设置。并尝试根据自己的一个网页所涉及的请求次数来调整,特别是对于https的连接来说,提高性能更是需要做的事情。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180205G11H9W00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券