保持活动连接中的HTTP客户端请求超时处理

时间:2015-07-15 20:44:43

标签: http keep-alive http-pipelining

关于HTTP keep-alive如何在客户端处理请求超时?例如,有一个流程:

  • 客户端发送Request1;
  • 客户等待1分钟;
  • 客户端假定Request1失败并重新发送,即发送新的Request2 = Request1;
  • 服务器响应Response1(这是Request1的响应);
  • 客户端假设这是对Request2的响应,但可以处理它,因为Request1 = Request2;
  • 客户端发送Request3;
  • 服务器响应Response2(对Request2的响应);
  • 客户端认为这是对Request3的响应,无法处理它。

我在specification找不到任何信息。它说如果服务器关闭连接时如何重试,但是当请求花费太长时间才能继续时,情况没有任何关系。

1 个答案:

答案 0 :(得分:0)

我有使用ASP.NET的经验,虽然我不确定这个paradiagm是否用于所有HTTP管道。这就是我的理解:

  • 响应与请求相关联。在C#中,有一个HttpContext可以促进这一点。新请求来自一个单独的线程,该线程没有任何其他请求的安全上下文。
  • 当客户提出请求时(例如,通过WebRequest),响应与该请求相关联。

因此,您示例中的Request1永远不会与Request2混淆。 HTTP请求标头中使用的keep-alive表示底层TCP connection shouldn't be closed,以便可以将其重用于其他请求。据我所知,单个请求超时不会影响底层TCP连接;也就是说,即使共享TCP连接,请求 - 响应机制仍可正常工作。