保持活动标题说明


106

我被要求建立一个网站,一位联合开发人员告诉我,我需要包括keep-alive标头。

好吧,我读了很多关于它,但仍然有疑问。

msdn->

当客户端对Web页面内容发出多个请求时,打开连接可提高性能,因为服务器可以更快地返回每个请求的内容。否则,服务器必须为每个请求打开一个新的连接

看着

在此处输入图片说明

  • 当IIS(F)将keep alive头(或用户发送保活),岂不是(ECB)保存这仅仅是我的会话的连接?
  • 该信息保存在哪里(“此连接属于“ Royi”)?
  • 这是否意味着没有其他人可以使用该连接
  • 如果是这样-这是否意味着保持活动头-减少重叠的连接用户数?
  • 如果是这样,连接将保存到我多长时间?(换句话说,如果我设置了保持活动状态-“保持”直到什么时候?)

ps对于那些感兴趣的人:

单击此示例页面将返回keep alive标头


2
Pfff,我在一次演讲中已经看到了,但是我不太确定。我以为保持活动仅在服务器和用户上进行。毕竟,介于两者之间的所有内容甚至都不知道它是HTTP,更不用说看标头了。
2013年

从MSDN引用的声明是drivel。如果没有保持活动状态,则是客户端必须打开新连接。
罗恩侯爵

而且,如果您要构建的是站点而不是Web服务器或客户端,则keepalive标头已经为您完成。
罗恩侯爵

Answers:


145

该信息保存在哪里(“此连接在计算机A和服务器之间F”)?

TCP连接由源IP和端口以及目标IP和端口识别。这样,您的OS,所有可识别中间会话的设备以及服务器的OS都可以识别连接。

HTTP与请求-响应一起工作:客户端连接到服务器,执行请求并获得响应。如果没有保持活动状态,则每次响应后都会关闭与HTTP服务器的连接。使用HTTP keep-alive,可以保持基础TCP连接处于打开状态,直到满足某些条件为止。

这允许在单个TCP连接上有多个请求-响应对,从而消除了TCP相对较慢的连接启动过程。

当IIS(F)发送保持活动标头(或用户发送保持活动状态)时,是否表示(E,C,B)保存了连接

不需要。路由器不需要记住会话。实际上,属于同一TCP会话的多个TCP数据包不必全部通过同一路由器-这就是TCP可以管理的。路由器只选择最佳的IP路径并转发数据包。保持活动仅适用于客户端,服务器和任何其他中间会话感知设备。

哪一个只适合我的课程?

这是否意味着没有其他人可以使用该连接

这就是TCP连接目的:它是仅针对这两方的端到端连接。

如果是这样-这是否意味着保持活动头-减少重叠的连接用户数?

定义“重叠连接”。有关某些优点和缺点,请参见HTTP持久连接,例如:

  • 降低CPU和内存使用率(因为同时打开的连接较少)。
  • 启用请求和响应的HTTP流水线。
  • 减少网络拥塞(更少的TCP连接)。
  • 减少了后续请求中的延迟(无握手)。

如果是这样,连接将保存到我多长时间?(换句话说,如果我设置了保持活动状态-“保持”直到什么时候?)

典型的保持活动响应如下所示:

Keep-Alive: timeout=15, max=100

例如,请参阅超文本传输​​协议(HTTP)保持活动标头(HTTP / 2的草稿,其中比26162086都更详细地说明了保持活动标头):

  • 主机将timeout参数的值设置为主机允许空闲连接在关闭之前保持打开状态的时间。如果主机未发送或接收任何数据,则连接处于空闲状态。

  • max参数指示客户端将发出的最大请求数,或服务器将允许在持久连接上进行的最大请求数。发送指定数量的请求和响应后,包含该参数的主机可以关闭连接。

但是,服务器可以在任意时间或任意数量的请求后自由关闭连接(只要它返回对当前请求的响应即可)。具体实现方式取决于您的HTTP服务器。


定义“重叠连接” ---->我的意思是同时。(而且我认为同时连接的数量将会减少,因为正如您所说:“连接X是为约翰保留的,因为它使用了keep-alive标头。” ...我是正确的吗?
Royi Namir

1
因此,您要说的是,如果服务器一次可以处理100个连接,并且所有这些连接都使用keep-alive,那么101'st连接将被转储?
罗伊·纳米尔

1
@Royi不,我不知道浏览器与给定主机建立了多少个保持活动连接,我并不是说浏览器只会打开一个。同时发出的请求数量是有限的,并且因浏览器而异。我的意思是,如果浏览器使用保持活动的连接,则它可能会代替NN连接的激发请求(默认情况下,每次响应后连接都会关闭),例如对N请求进行激发N / M甚至只是对M连接进行激发,因为它可以对多个请求进行激发每个打开的连接,因此可以减少使用。
CodeCaster

1
我知道。(:-))您在评论中说过:使用keep-alive时,客户端建立的并发连接较少,它将以串行而不是parallell触发请求。我只是不明白它与Keepalive有何关系。
罗伊·纳米尔

5
E,C,B不保存会话。这些是路由器,它们没有任何会话表,也不需要,因为来自同一TCP客户端到服务器会话的多个数据包可能遵循不同的路径。路由器的作用是选择最佳的IP路径并相应地转发数据包,因此它不会到达传输层(TCP / UDP),也不会进入应用程序层以查看保持活动报头。因此,基本上,保持活动是显式地在客户端和服务器之间进行的,并且隐式地使会话感知设备(例如防火墙)向该显式的客户端到服务器会话打开
Amine Kadimi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.