HTTPQUERY
Русский

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