当服务器为异步请求返回202 - Accepted
状态代码时,给出请求完成估计的适当方法是什么?
来自HTTP spec(我添加的斜体):
202接受
请求已被接受处理,但处理尚未完成。 [...]
使用此响应返回的实体应该包括请求的当前状态的指示,以及指向状态监视器的指针或用户可以期望满足请求的某些估计。
以下是一些想法:
Cache-Control
?X-
响应标头,但RFC 6648中已弃用X-
标头? X-
)特定响应标头?如果是这样,它应该如何命名? SO问题Custom HTTP headers : naming conventions给出了一些想法,但在弃用之后,它只回答了如何格式化HTTP标头,而不是如何命名它们。答案 0 :(得分:10)
绝对不要滥用现有的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"
}
}
答案 1 :(得分:9)
您可以使用Location
标头指定状态监视器的URL。诸如当前状态和估计之类的事情可以放在自定义标题中(除了您自己的软件之外不会使用),或者放在响应主体中(至少是Web浏览器会向用户显示)。
答案 2 :(得分:5)
虽然没有明确提及202 - Accepted
响应代码,但Retry-After
标头似乎是一个合适的选项。来自documentation:
可以使用Retry-After响应标头字段来指示服务预计对请求客户端不可用的时间。