HTTP Status 202-как предоставить информацию о завершении асинхронного запроса?
каков оптимальный способ дать оценку для завершения запроса, когда сервер возвращает 202 - Accepted
код состояния для асинхронных запросов?
С HTTP в спецификации (курсив добавлен мной):
202 принято
запрос принят для обработки, но обработка не была завершена. [...]
сущность, возвращаемая с этим ответом, должна включите указание текущего состояния запроса и указатель на монитор состояния или некоторая оценка того, когда пользователь может ожидать, что запрос будет выполнен.
вот некоторые мысли:
- я взглянул на max-age директива, но ее использование было бы злоупотреблением
Cache-Control
? - вернуть ожидаемое время ожидания в теле ответа?
- добавить конкретное приложение
X-
заголовок ответа, ноX-
заголовки устарели в RFC 6648? - добавить a (non
X-
) конкретный заголовок ответа? Если да, то как его следует назвать? Так вопрос пользовательские заголовки HTTP: соглашения об именах дал некоторые идеи, но после устаревания он отвечает только на то, как форматируются заголовки HTTP, а не как их следует называть. - другие предложения?
3 ответов
определенно не злоупотребляйте существующими заголовками HTTP для этого. Поскольку это ваш собственный сервер, вы можете определить, как выглядит ответ. Вы можете (и должны) выбрать любой ответ, который лучше всего подходит для предполагаемого получателя этой информации, и вернуть фактическую информацию в теле ответа.
например, если вы заинтересованы только в отображении читаемого человеком сообщения, то вы можете вернуть text/plain
говоря: "ваш запрос, вероятно, будет обработан в ближайшие 30 протокол.".
на другом конце спектра вы можете захотеть пройти весь остальной путь и вернуться 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 [...] чтобы указать, как долго служба будет недоступна запрашивающему клиенту.