202 Accepted
Применение
Код состояния 202 Accepted служит подтверждением: сервер получил запрос и намерен обработать переданные данные. На практике это означает, что сервер проверил формат запроса и поместил работу во внутреннюю очередь. Поставленная в очередь задача часто представляет собой длительный процесс или часть пакетной операции.
Механизма, позволяющего серверу отправить позднее ещё один ответ с итоговым результатом, не существует. Клиент сам отвечает за периодический опрос — при условии, что сервер предоставляет эндпоинт состояния.
Влияние на SEO
Googlebot, встретив ответ 202, непродолжительное время ждёт содержимое. Содержимое, полученное в течение периода ожидания, передаётся в конвейер индексации, однако индексация не гарантируется.
Как только приходит успешный ответ 200, опрос прекращается. Другие допустимые исходы — 201, когда новый ресурс создан и доступен по URI из заголовка Location, или 204, когда задание завершено и возвращать нечего.
Пример
Клиент отправляет XML-данные, описывающие задание. Сервер подтверждает приём. Последующими запросами клиент проверяет, завершена ли работа. В итоге сервер сообщает о завершении.
Запрос
POST /job HTTP/1.1
Host: example.com
Content-Type: application/xml
Content-Length: 68
<?xml version="1.0"?>
<job>
<id>125</id>
<task>G01</task>
</job>
Ответ
HTTP/1.1 202 Accepted
Link: </job/status/125>; rel="http://example.re/job-status"
Content-Length: 0
Запрос состояния 1
GET /job-status/125 HTTP/1.1
Host: example.com
Ответ
HTTP/1.1 202 Accepted
Content-Length: 0
Запрос состояния 2
GET /job-status/125 HTTP/1.1
Host: example.com
Ответ
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 18
{"success":"true"}
После получения кода состояния 200 клиент прекращает опрос и обрабатывает результат.
Тело ответа в 202
Ответ 202 Accepted может содержать тело сообщения. Обычно тело содержит текущее состояние запроса, ссылку на эндпоинт мониторинга состояния или оценку времени завершения операции. В отличие от 201, который указывает на созданный ресурс, тело 202 описывает саму незавершённую операцию.
202 против 201
Ответ 201 подтверждает, что ресурс создан и доступен немедленно. Ответ 202 подтверждает, что запрос получен, но обработка ещё не завершена. Используйте 201, когда ресурс уже существует на момент ответа. Используйте 202, когда работа поставлена в очередь или выполняется асинхронно и окончательный результат пока неизвестен.
Примеры кода
.NET
HttpStatusCode.Accepted
Rust
http::StatusCode::ACCEPTED
Rails
:accepted
Go
http.StatusAccepted
Symfony
Response::HTTP_ACCEPTED
Python3.5+
http.HTTPStatus.ACCEPTED
Java
java.net.HttpURLConnection.HTTP_ACCEPTED
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_ACCEPTED
Angular
@angular/common/http/HttpStatusCode.Accepted