HTTP管道和错误处理

HTTP管道和错误处理,http,sockets,Http,Sockets,让我们设想一个web服务器处理一系列请求,其中一个由于某种原因而失败。在什么情况下服务器可以保持连接,在什么情况下应该关闭连接? 显然,403和404这样的错误可以在不关闭连接的情况下处理。如果响应的一部分已经发送,则错误很可能会导致连接关闭 但“正常”5xx错误怎么办?流行的web服务器实现倾向于保留管道还是关闭管道 非常感谢您提供的所有信息。我认为一般来说,连接不会因为5xx错误而关闭,因为它们是特定于请求的,而不是连接,因此同一连接上的不同请求可能是针对另一个资源的 只有在存在无法保持打开

让我们设想一个web服务器处理一系列请求,其中一个由于某种原因而失败。在什么情况下服务器可以保持连接,在什么情况下应该关闭连接? 显然,403和404这样的错误可以在不关闭连接的情况下处理。如果响应的一部分已经发送,则错误很可能会导致连接关闭

但“正常”5xx错误怎么办?流行的web服务器实现倾向于保留管道还是关闭管道


非常感谢您提供的所有信息。

我认为一般来说,连接不会因为5xx错误而关闭,因为它们是特定于请求的,而不是连接,因此同一连接上的不同请求可能是针对另一个资源的

只有在存在无法保持打开状态的原因时(例如NTLM身份验证失败(401),才应关闭连接,这取决于连接)。由于几乎所有其他原因,连接应该保持打开状态,因为请求是独立的,HTTP实际上没有连接语义


但是,我不知道流行的web服务器实现会做什么。如果您能进一步解释您试图解决的问题(为什么您关心连接是否关闭),那么也许我们可以提供更多信息。

我认为一般来说,连接不会因为5xx错误而关闭,因为它们特定于请求,而不是连接,因此,同一连接上的不同请求可能是针对另一个资源的

只有在存在无法保持打开状态的原因时(例如NTLM身份验证失败(401),才应关闭连接,这取决于连接)。由于几乎所有其他原因,连接应该保持打开状态,因为请求是独立的,HTTP实际上没有连接语义


但是,我不知道流行的web服务器实现会做什么。如果您能进一步解释您试图解决的问题(为什么您关心连接是否关闭),那么我们也许可以提供更多信息。

内存不足的情况如何?我正在实现一个HTTP服务器,如果其他人在这种情况下也不跳出来,我很乐意节省一些时间。如果您正在实现服务器,并且服务器由于任何原因无法全局继续,那么您当然可以关闭连接。通常,作为一个服务器,如果你希望客户端能够在你这样做时做正确的事情,你可以随时关闭连接。这一点很好!事实上,我总是可以通过发送“Connection:close”头和错误消息来警告客户端。如果您已经开始回复请求,然后无法继续,那么问题也会变得更复杂(假设发送回复的东西已死亡)。任何排队等待请求2的东西都必须放弃;在第一个答复完成之前,您无法开始新的答复。在任何情况下,我的观点都是放弃连接。客户端应构建为健壮的-网络故障。:-)内存不足的情况如何?我正在实现一个HTTP服务器,如果其他人在这种情况下也不跳出来,我很乐意节省一些时间。如果您正在实现服务器,并且服务器由于任何原因无法全局继续,那么您当然可以关闭连接。通常,作为一个服务器,如果你希望客户端能够在你这样做时做正确的事情,你可以随时关闭连接。这一点很好!事实上,我总是可以通过发送“Connection:close”头和错误消息来警告客户端。如果您已经开始回复请求,然后无法继续,那么问题也会变得更复杂(假设发送回复的东西已死亡)。任何排队等待请求2的东西都必须放弃;在第一个答复完成之前,您无法开始新的答复。在任何情况下,我的观点都是放弃连接。客户端应构建为健壮的-网络故障。:-)