当服务器为异步请求返回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字段可用于[…]指示请求客户端预计无法使用服务的时间。