2

打开 2 个 TCP 连接:1. 正常连接(在实现 echo server、client 时)& 2. HTTP 连接

在将 apache 作为服务器运行时使用 curl(modified) 实用程序打开了 HTTP 连接,其中 curl 在连接建立后的一段时间内没有发送 GET 请求。对于连接建立后的正常连接,服务器正在等待来自客户端的请求。但正如所观察到的,奇怪的是在连接建立后的 HTTP 连接中,如果 GET 请求不是来自客户端(一段时间),服务器正在向客户端发送 FIN pkt 并关闭他的连接部分。 HTTP客户端在初始连接后立即发送GET请求是否是强制性条件。

4

1 回答 1

0

Apache 有一个名为 Timeout 的参数。

它的手册页(Apache Core - Timeout Directive)指出:

TimeOut 指令定义了 Apache 在各种情况下等待 I/O 的时间长度:

  1. 从客户端读取数据时,如果读取缓冲区为空,则等待 TCP 数据包到达的时间长度。
  2. 向客户端写入数据时,如果发送缓冲区已满,则等待数据包确认的时间长度。
  3. 在 mod_cgi 中,等待 CGI 脚本输出的时间长度。
  4. 在 mod_ext_filter 中,等待过滤过程输出的时间长度。
  5. 在 mod_proxy 中,如果未配置 ProxyTimeout,则为默认超时值。

我认为你陷入了第一个案例

编辑

我潜伏在 W3 HTTP 文档中,发现没有提到超时。

但在第 8 章(连接)中,我发现:

8.1.4 实际考虑

服务器通常会有一些超时值,超过这个值它们将不再保持非活动连接。(...) 持久连接的使用对客户端或服务器的超时长度(或存在)没有任何要求。

这在我看来就像“每个服务器或客户端都可以自由选择关于非活动连接超时的行为”

于 2013-01-23T08:24:50.687 回答