HTTP状态202-如何提供有关异步请求完成的信息



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

根据HTTP规范(我添加的斜体):

202已接受

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

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

以下是一些想法:

  • 我看了一眼最大年龄指令,但使用它会滥用Cache-Control
  • 返回响应正文中的预期等待时间
  • 添加特定于应用程序的X-响应标头,但X-标头在RFC 6648中被弃用
  • 是否添加(非X-)特定的响应标头?如果是,应该如何命名?SO的问题自定义HTTP头:命名约定给出了一些想法,但在弃用之后,它只回答了HTTP头的格式,而不是应该如何命名
  • 其他建议

绝对不要为此滥用现有的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"
  }
}

您可以使用Location标头来指定状态监视器的URL。像当前状态和估计这样的东西可以放在自定义标题中(除了你自己的软件之外,没有人会使用),也可以放在响应体中(至少网络浏览器会向用户显示)。

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

Retry After response header字段可用于[…]指示请求客户端预计无法使用服务的时间。

相关内容

  • 没有找到相关文章

最新更新