【发布时间】:2018-02-24 08:34:31
【问题描述】:
当客户端在发出 HTTP 请求时取消 TCP 连接时,我想停止在服务器上执行任何工作并返回空响应。这样的响应应该返回什么 HTTP 状态码?
【问题讨论】:
-
当一个请求被取消时,客户端会读取服务器响应吗? “取消”到底是什么意思?你试过什么?为什么每天有十个“我的情况很独特,告诉我应该使用大约 20 个状态代码中的哪一个” 问题?这真的重要吗?
-
这仍然很重要,因为缓存、浏览器开发工具和其他中介仍然会读取响应。到目前为止,我只是在使用 400 Bad Request 但感觉不对。这不是一个独特的情况,我很惊讶没有答案。状态代码都是关于语言的,这就是为什么很难知道使用哪个。您在 API/站点中使用的语言很重要,因为它传达了意图。如果我的浏览器取消了一个请求,并且我在 F12 开发者工具中看到 400 Bad Request,这表明该请求无效,这是不正确的意图。
-
HTTP 中无法让客户端取消请求。因此,没有定义任何代码供服务器返回也就不足为奇了。
-
我认为考虑取消请求的原因非常重要,而不是为任何被取消的请求寻找一个特定的代码。
-
如果服务器仍然可以发送,那么它可以发送它想要的任何响应,包括请求的完整休息。客户端取消(关闭其发送部分)仅意味着服务器将不再从客户端接收任何数据。客户端可能会继续从服务器接收剩余的结果。另一方面,如果客户端关闭了套接字的两半,那么服务器在接下来对该套接字执行任何操作时都会收到错误消息,并且无需再向客户端发送任何内容即可恢复。
标签: http http-status-codes cancellation request-cancelling