28

202 - Accepted当服务器返回异步请求的状态代码时,估计请求完成的适当方法是什么?

HTTP 规范我添加的斜体):

202 接受

请求已被接受处理,但处理尚未完成。[...]

与此响应一起返回的实体应该包括请求当前状态的指示以及指向状态监视器的指针或用户可以期望何时完成请求的一些估计

以下是一些想法:

  • 我看过max-age指令,但使用它会滥用Cache-Control吗?
  • 在响应正文中返回预期的等待时间?
  • 添加特定于应用程序的X-响应标头,但X-标头在RFC 6648中已弃用?
  • 添加(非X-)特定响应标头?如果是这样,它应该如何命名?SO question Custom HTTP headers :naming conventions给出了一些想法,但在弃用之后,它只回答了 HTTP 标头的格式,而不是它们应该如何命名。
  • 其他建议?
4

3 回答 3

15

绝对不要为此滥用现有的 HTTP 标头。由于它是您自己的服务器,因此您可以定义响应的外观。您可以(并且应该)选择最适合此信息的预期接收者的任何响应,并在响应正文中返回实际信息。

例如,如果您只对显示人类可读的消息感兴趣,那么您可以返回text/plain说“您的请求可能会在接下来的 30 分钟内得到处理。”。

在光谱的另一端,您可能希望以所有 REST 方式返回application/json,可能格式如下(我完全是当场编造的):

{
  "status": "pending",
  "completion": {
    "estimate": "Thu Sep 08 2011 12:00:00 GMT-0400",
    "rejected-after": "Fri Sep 09 2011 12:00:00 GMT-0400",
  },
  "tracking": {
    "url": "http://server/status?id=myUniqueId"
  }
}
于 2013-02-12T13:29:51.727 回答
13

您可以使用Location标头指定状态监视器的 URL。当前状态和估计之类的内容可以放在自定义标头中(除了您自己的软件之外没有人会使用),也可以放在响应正文中(至少 Web 浏览器会向用户显示)。

于 2013-02-12T13:31:47.467 回答
6

虽然没有明确提及202 - Accepted响应代码,但Retry-After标头似乎是一个合适的选项。从文档中:

The Retry-After response-header field can be used [...] to indicate how long the service is expected to be unavailable to the requesting client.

于 2013-03-27T09:51:01.890 回答