保持活动状态并请求超时
Keep alive and request timeouts
我了解 keep-alive
message 旨在防止底层 TCP 连接关闭,以便可以通过同一 TCP 连接发送多个请求。
然而,尚不清楚这对已超时的请求有何影响:
- 如果通过同一个 TCP 连接处理多个请求,当客户端超时时,ASP.NET 如何知道?我不确定如何正确地问这个问题,但我怀疑如果底层 TCP 连接关闭,
HttpWorkerRequest.IsClientConnected
是假的?我如何确定客户端是否超时?回复肯定不能再发了吧?
- 既然客户端可以发送
keep-alive
消息,那么它对请求有什么影响(如果有的话)?我希望它不会有任何效果,并且超时等机制会照常工作。
感谢您的宝贵时间和协助。
HTTP keep-alive(不要与TCP keep alive 混淆)要求服务器在HTTP 响应完全发送后不要关闭连接。因此,HTTP keep-alive 仅与发送 HTTP 响应之后和接收到下一个 HTTP 请求之前的时间有关。
... when the client times-out, how will ASP.NET know?
服务器正在尝试读取数据。如果客户端关闭连接,服务器将收到通知(如读取 0 字节)并关闭连接。
... Surely the response can no longer be sent?
重复一遍,HTTP keep-alive 仅在发送完整响应后才有意义。所以这个问题和HTTP keep-alive无关。
Since the client can send keep-alive messages, what effect, if any does it have on the request?
对当前请求没有影响。但客户端必须知道,在发送 HTTP 响应之后和服务器收到新请求之前,服务器可能会随时关闭连接。因此,服务器可能恰好在客户端尝试发送新请求的那一刻关闭连接。在这种情况下,客户端必须在新连接中重试幂等请求 (GET),而其他请求应该失败。
我了解 keep-alive
message 旨在防止底层 TCP 连接关闭,以便可以通过同一 TCP 连接发送多个请求。
然而,尚不清楚这对已超时的请求有何影响:
- 如果通过同一个 TCP 连接处理多个请求,当客户端超时时,ASP.NET 如何知道?我不确定如何正确地问这个问题,但我怀疑如果底层 TCP 连接关闭,
HttpWorkerRequest.IsClientConnected
是假的?我如何确定客户端是否超时?回复肯定不能再发了吧? - 既然客户端可以发送
keep-alive
消息,那么它对请求有什么影响(如果有的话)?我希望它不会有任何效果,并且超时等机制会照常工作。
感谢您的宝贵时间和协助。
HTTP keep-alive(不要与TCP keep alive 混淆)要求服务器在HTTP 响应完全发送后不要关闭连接。因此,HTTP keep-alive 仅与发送 HTTP 响应之后和接收到下一个 HTTP 请求之前的时间有关。
... when the client times-out, how will ASP.NET know?
服务器正在尝试读取数据。如果客户端关闭连接,服务器将收到通知(如读取 0 字节)并关闭连接。
... Surely the response can no longer be sent?
重复一遍,HTTP keep-alive 仅在发送完整响应后才有意义。所以这个问题和HTTP keep-alive无关。
Since the client can send keep-alive messages, what effect, if any does it have on the request?
对当前请求没有影响。但客户端必须知道,在发送 HTTP 响应之后和服务器收到新请求之前,服务器可能会随时关闭连接。因此,服务器可能恰好在客户端尝试发送新请求的那一刻关闭连接。在这种情况下,客户端必须在新连接中重试幂等请求 (GET),而其他请求应该失败。