【问题标题】:What is the appropriate HTTP status code to ask a client to redo an operation要求客户端重做操作的适当 HTTP 状态代码是什么
【发布时间】:2015-01-16 19:21:44
【问题描述】:

我的 Web 应用程序上有一个端点,它从客户端获取数据,一旦收集到足够的数据,就会执行操作。如果这个操作的结果无效,我需要通知客户端这个操作必须重做。

我可以发送带有某种标志的响应,但如果已经为此目的存在状态代码,我宁愿使用它。

查看状态码here的定义,似乎没有合适的,但是,如果我只考虑名称而不考虑描述,状态码406 Not Acceptable 听起来最合适。

【问题讨论】:

  • 给我一个无效操作的例子?需要更多的操作信息来决定状态码。
  • 它本身并不是无效操作。我收集了大量数字(确切地说是双数组)并对其进行了一些计算。输出是一个 3 项双精度数组。对输出执行验证。此操作可以处于 3 种状态,分别是“需要数据”、“正在处理”和已完成。目前,我将状态设置回需要数据并在 200 HttpResponse 中返回。如果有表示完成但不成功的 HttpStatus 代码将很有用,请再做一次。

标签: api http web http-status-codes


【解决方案1】:

406 Not Acceptable 不合适,因为状态码用于内容协商:

406(不可接受)状态码表示目标 资源没有当前的表示形式 根据主动协商,用户代理可以接受 请求中收到的标头字段(第 5.3 节),以及服务器 不愿意提供默认表示。 -- https://www.rfc-editor.org/rfc/rfc7231#section-6.5.6

202 Accepted似乎更好:

202(Accepted)状态码表示请求已经被 接受处理,但处理尚未完成。 -- https://www.rfc-editor.org/rfc/rfc7231#section-6.3.3

...但我不确定状态码的用途是否与您的用途相符:

202 响应是故意不置可否的。其目的是 允许服务器接受对其他进程的请求(可能是 面向批处理的过程,每天只运行一次) 要求用户代理与服务器的连接持续存在 直到该过程完成。 -- https://www.rfc-editor.org/rfc/rfc7231#section-6.3.3

通常 http 响应不会明确要求用户代理发送附加信息。我知道的唯一状态码是 401 Unauthorized ,它请求 Authorization 标头。您可能需要为您的目的设计自己的状态代码。请通过HTTP Working Group mailing list咨询。

【讨论】:

  • 这似乎是对问题的一种误解。在提交读数时,我们返回 202。但是一旦客户端通过指示不再发送读数的标志,进程就会运行,如果它产生无效数据,它应该告诉客户端尝试发送一批再次数据。如果它完成,我们将处理它。不过感谢您的回答。
猜你喜欢
  • 2016-12-05
  • 2019-03-30
  • 1970-01-01
  • 1970-01-01
  • 2013-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-12
相关资源
最近更新 更多