【问题标题】:Keep-alive header clarification保持活动标题说明
【发布时间】:2014-01-02 18:26:08
【问题描述】:

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

好吧,我读了很多关于它的内容,但我仍然有问题。

msdn ->

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

看着

  • 当 IIS (F) 发送 keep alive 标头(或用户发送 keep-alive)时,是否意味着 (E,C,B) 保存了一个连接哪个只适用于我的会话?
  • 此信息保存在哪里(“此连接属于“Royi”)?
  • 这是否意味着没有其他人可以使用该连接
  • 如果是这样-是否意味着keep alive-header-减少重叠连接用户的数量?
  • 如果是这样,连接会保存多久? (换句话说,如果我设置保持活动-“保持”到什么时候?)

附言有兴趣的朋友:

单击this sample page 将返回保持活动标题

【问题讨论】:

  • 噗,我在讲座中看到过这个,但我不太确定。我认为保持活动仅在服务器和用户上。毕竟,中间的一切都不应该知道它是 HTTP,更不用说查看标头了。
  • 引用自 MSDN 的声明是乱码。如果没有keep-alive,则客户端必须打开一个新连接。
  • 如果您正在构建一个站点,而不是 Web 服务器或客户端,那么 keepalive 标头已经为您完成了。

标签: http http-headers keep-alive


【解决方案1】:

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

TCP 连接由源 IP 和端口以及目标 IP 和端口识别。您的操作系统、所有中间会话感知设备和服务器的操作系统将通过此识别连接。

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

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

当 IIS (F) 发送 keep-alive 标头(或用户发送 keep-alive)时,是否意味着 (E,C,B) 保存了连接

没有。路由器不需要记住会话。事实上,属于同一个 TCP 会话的多个 TCP 数据包不需要都经过同一个路由器——这是由 TCP 管理的。路由器只是选择最佳 IP 路径并转发数据包。 Keep-alive 仅适用于客户端、服务器和任何其他中间会话感知设备。

这仅适用于我的会话?

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

那是intention of TCP connections:它是一个只为这两方设计的端到端连接。

如果是这样-是否意味着keep alive-header-减少重叠连接用户的数量?

定义“重叠连接”。一些优缺点见HTTP persistent connection,比如:

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

如果是这样,连接会保存多久? (换句话说,如果我设置保持活动-“保持”到什么时候?)

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

Keep-Alive: timeout=15, max=100

例如参见Hypertext Transfer Protocol (HTTP) Keep-Alive Header(HTTP/2 的草案,其中对 keep-alive 标头的解释比26162086 都更详细):

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

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

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

【讨论】:

  • 定义“重叠连接”---->我的意思是同时。 (而且我认为同时连接的数量会减少,因为正如您所说:“连接 X 是为 John 保留的,因为它使用 keep-alive 标头。”....我说得对吗?
  • 那么你的意思是,如果服务器一次可以处理100个连接,并且所有这些连接都使用keep-alive,那么第101个连接将被转储???跨度>
  • @Royi 不,我不知道浏览器与给定主机建立了多少保持活动连接,我并不是说浏览器只会打开一个。同时发出的请求数量为limited and varies per browser。我的意思是,如果浏览器使用保持活动连接,它可能不会通过N 连接触发N 请求(默认情况下,每次响应后连接都会关闭),例如通过N / M 触发N 请求甚至只是M 连接,因为它可以在每个打开的连接上触发多个请求,因此可以使用更少。
  • 我知道。(:-)) 你在评论中说:客户端在使用 keep-alive 时会产生更少的同时连接,它会以串行方式而不是并行方式触发请求 。我只是不明白它与keepalive有什么关系。
  • E、C、B 不保存会话。这些是路由器,它们没有任何会话表,也不需要,因为来自同一个 TCP 客户端到服务器会话的多个数据包可能遵循不同的路径。路由器的作用是选择最佳的IP路径并相应地转发数据包,因此它不会上到传输层(TCP/UDP),也不会上到应用层看到keep-alive头。所以基本上保持活动在客户端和服务器之间是明确的,并且隐含地允许会话感知设备 - 例如。防火墙 - 向该显式客户端到服务器会话开放
猜你喜欢
  • 2021-12-06
  • 1970-01-01
  • 2012-11-12
  • 2013-06-24
  • 1970-01-01
  • 2012-03-09
  • 1970-01-01
  • 2013-10-19
相关资源
最近更新 更多