Коды статуса ответа HTTP

Основной источник: RFC9110, Internet Engineering Task Force (IETF)

Стандарт RFC9110

Код статуса ответа — это трехзначный целочисленный код, описывающий результат запроса и семантику ответа, включая информацию, был ли запрос успешным и какое содержимое включено (если есть).

Первая цифра кода статуса определяет класс ответа. Последние две цифры не имеют категоризационной роли. Для первой цифры существует пять значений: 

1xx (Информационный) : Запрос получен, процесс продолжается 

2xx (Успешно) : запрос был успешно получен, понят и принят 

3xx (Перенаправление) : Для выполнения запроса необходимо предпринять дополнительные действия 

4xx (Ошибка клиента) : запрос содержит неверный синтаксис или не может быть выполнен 

5xx (Ошибка сервера) : сервер не смог выполнить запрос 


(!) Клиент ДОЛЖЕН понимать по первой цифре класс любого кода статуса и рассматривать нераспознанный код статуса как эквивалент x00 этого класса. 

Например, если клиент получает нераспознанный код статуса 471, он может по первой цифре понять, что с его запросом что-то не так, и обработать ответ так, как если бы он получил код статуса 400 (неверный запрос) . Ответное сообщение обычно будет содержать представление, объясняющее статус.


Значения вне диапазона 100..599 недействительны. 

Пример: Часто используют трехзначные целые значения вне этого диапазона (т. е. 600..999) для внутренней связи о состоянии, отличном от HTTP (например, ошибки библиотеки). 

(!) Клиент, который получает ответ с недействительным кодом состояния, ДОЛЖЕН обработать ответ так, как если бы он имел код состояния 5xx (ошибка сервера) 


(!) Прим.: Фразы причин в спеке RFC являются только рекомендациями (см.15.1.). 


200, 203, 204, 206, 300, 301, 308, 404, 405, 410, 414 и 501 определены как эвристически кэшируемые и могут быть повторно использованы кэшем с эвристическим истечением срока действия, если иное не указано в определении метода или явных элементах управления кэшем. все остальные коды состояния не являются эвристически кэшируемыми
(P.S. Для отключения кэширования лучше всего использовать Cache-Control: no-store или Cache-Control: max-age=0).


Informational 1xx

1xx Informational указывает на промежуточный ответ для хода выполнения запроса до отправки окончательного ответа. Завершается концом раздела заголовка и не может содержать контент. Клиент ДОЛЖЕН иметь возможность анализировать несколько ответов 1xx, полученных до окончательного ответа.

Запрос может иметь несколько связанных ответов: ноль или более «промежуточных» неокончательных «информационных» ( 1xx ) ответов, за которыми следует ровно один «окончательный» ответ с кодом состояния в одном из других диапазонов.

100 (Continue) указывает, что начальная часть запроса получена и еще не отклонена, сервер желает получить полное содержимое запроса. Клиент должен продолжить отправку запроса и отклонить ответ 100.

101 (Switching Protocols) указывает, что сервер готов выполнить запрос клиента через поле заголовка Upgrade на изменение протокола соединения. Сервер ДОЛЖЕН сгенерировать поле заголовка Upgrade в ответе, которое указывает, какой протокол(ы) будет действовать после этого ответа.

102 (Processing) (см. rfc2518) указывает, что сервер принял полный запрос, но еще не завершил его. Этот код состояния СЛЕДУЕТ отправлять, если у сервера есть обоснованное ожидание, что выполнение запроса займет значительное время. В качестве руководства, если метод обрабатывается дольше 20 секунд (разумное, но произвольное значение), сервер ДОЛЖЕН вернуть ответ 102 (Обработка). Сервер ДОЛЖЕН отправить окончательный ответ после завершения запроса, но это не обязывает клиент не прервывать соединение. 


Successful 2xx

2xx Successful указывает на то, что запрос клиента был успешно получен, понят и принят.

200 (OK) указывает на то, что запрос выполнен успешно. Содержимое, отправленное в ответе 200, зависит от метода запроса.

201 (Created) указывает, что запрос был выполнен и привел к созданию новых ресурсов. Основной ресурс, созданный запросом, идентифицируется полем заголовка Location или целевым URI. Содержимое ответа 201 обычно описывает созданный ресурс(ы) и ссылается на них.

202 (Accepted) указывает на то, что запрос принят для обработки, но она не завершена. Запрос не обязывающий и только потенциально запускает процесс, не требующий, чтобы соединение с сервером сохранялось до завершения. Representation (представление) ответа должно описывать текущий статус запроса и предоставлять мониторинг статуса.

203 (Non-Authoritative Information) указывает на то, что запрос был успешным, но вложенное содержимое было изменено по сравнению с ответом исходного сервера.

204 (No Content) указывает, что действие было успешно применено к целевому ресурсу, и что нет дополнительного контента для отправки в ответном контенте. 
Например, код статуса 204 обычно используется с интерфейсами редактирования документов, соответствующими действию «сохранить», так что сохраняемый документ остается доступным пользователю для редактирования. 

205 (Reset Content) указывает на то, что сервер выполнил запрос и хочет, чтобы пользовательский агент сбросил «представление документа», вызвавшее отправку запроса, в исходное состояние, полученное от исходного сервера. 

206 (Partial Content) указывает на то, что сервер успешно выполняет запрос путем передачи одной или нескольких частей выбранного представления. Клиент ДОЛЖЕН проверить поля Content-Type и Content-Range ответа 206 , чтобы определить, какие части включены и нужны ли дополнительные запросы. Если передаются несколько частей, сервер, генерирующий ответ 206, ДОЛЖЕН генерировать содержимое "multipart/byteranges".

Content-Length: 1741
Content-Type: multipart/byteranges; boundary=THIS_STRING_SEPARATES

--THIS_STRING_SEPARATES
Content-Type: application/pdf
Content-Range: bytes 500-999/8000

...the first range...
--THIS_STRING_SEPARATES
Content-Type: application/pdf
Content-Range: bytes 7000-7999/8000

...the second range
--THIS_STRING_SEPARATES--


Redirection 3xx

3xx Redirection указывает на необходимость дальнейших действий со стороны агента пользователя для выполнения запроса.
Существует несколько типов перенаправлений:

Если поле заголовка Location указано, пользовательский агент МОЖЕТ автоматически перенаправить свой запрос на URI, на который ссылается значение поля Location, даже если конкретный код статуса не понят. Тогда есть нюансы повторного запроса (см. RFC).

300 (Multiple Choices) указывает, что целевой ресурс имеет более одного представления, каждое из которых имеет свой собственный более конкретный идентификатор, и информация об альтернативах предоставляется, чтобы пользователь мог выбрать предпочтительное представление.

301 (Moved Permanently) указывает, что целевому ресурсу был назначен новый постоянный URI, и любые будущие ссылки на этот ресурс должны использовать один из вложенных URI. Сервер ДОЛЖЕН сгенерировать поле заголовка Location в ответе, содержащее предпочтительную ссылку URI для нового постоянного URI.

302 (Found) указывает на то, что целевой ресурс временно находится под другим URI. Поскольку перенаправление может время от времени меняться, клиент должен продолжать использовать целевой URI для будущих запросов.

303 (See Other) указывает на то, что сервер перенаправляет на другой ресурс (URI в поле заголовка Location), который предназначен для предоставления косвенного ответа на исходный запрос.

304 (Not Modified) серверу нет необходимости передавать представление целевого ресурса, поскольку запрос указывает на то, что клиент уже имеет действительное представление. Цель ответа 304 заключается в минимизации передачи информации, когда у получателя уже есть одно или несколько кэшированных представлений. Сервер, генерирующий ответ 304, ДОЛЖЕН сгенерировать любое из следующих полей заголовка: Content-Location , Date , ETag и Vary, управление кэшированием и истечение срока действия.

305 (Use Proxy) устарел. См RFC7231.

306 (Unused) не используется и зарезервирован.

307 (Temporary Redirect) указывает, что целевой ресурс временно находится под другим URI, и пользовательский агент НЕ ДОЛЖЕН изменять метод запроса, если он выполняет автоматическое перенаправление на этот URI. Содержимое ответа сервера обычно содержит короткую гипертекстовую заметку с гиперссылкой на другой(ие) URI(ы)

308 (Permanent Redirect) указывает, что целевому ресурсу был назначен новый постоянный URI, и любые будущие ссылки на этот ресурс должны использовать один из вложенных URI. Сервер ДОЛЖЕН сгенерировать поле заголовка Location в ответе, содержащее предпочтительную ссылку URI для нового постоянного URI. 


Client Error 4xx

4xx Client Error указывает на то, что клиент, по-видимому, допустил ошибку. За исключением HEAD, сервер ДОЛЖЕН отправить представление, содержащее объяснение ситуации ошибки и является ли это временным или постоянным состоянием. 

400 (Bad Request) указывает на то, что сервер не может или не будет обрабатывать запрос из-за чего-то, что воспринимается как ошибка клиента (например, неверный синтаксис запроса, недопустимое формирование сообщения запроса или обманчивая маршрутизация).

401 (Unauthorized) указывает, что запрос не применен, т.к. отсутствуют действительные учетные данные аутентификации для целевого ресурса.
Сервер, генерирующий ответ 401, ДОЛЖЕН отправить поле заголовка WWW-Authenticate («WWW-Authenticate» указывает схему(ы) аутентификации и параметры, применимые к целевому ресурсу.), содержащее по крайней мере один вызов, применимый к целевому ресурсу.

402 (Payment Required) зарезервирован

403 (Forbidden) указывает на то, что сервер понял запрос, но отказывается его выполнять. Сервер может описать эту причину в содержании ответа, если хочет и она есть.
Например, в запросе были предоставлены учетные данные аутентификации, которые сервер считает их недостаточными для предоставления доступа.
Исходный сервер, желающий «скрыть» текущее существование запрещенного целевого ресурса, МОЖЕТ вместо этого ответить кодом состояния 404 (не найдено).

404 (Not Found) указывает на то, что исходный сервер не нашел текущего представления для целевого ресурса или не желает раскрывать, что оно существует. 404 не указывает, является ли это отсутствие представления временным или постоянным. Для постоянного предпочтительнее 410.

405 (Method Not Allowed) указывает, что метод, полученный в строке запроса, известен исходному серверу, но не поддерживается целевым ресурсом. Исходный сервер ДОЛЖЕН сгенерировать поле заголовка Allow в ответе 405, содержащем список поддерживаемых в настоящее время методов целевого ресурса.

406 (Not Acceptable) указывает на то, что целевой ресурс не имеет текущего представления, которое было бы приемлемо для пользовательского агента, согласно полям заголовка и не желает предоставлять вариант представления по умолчанию. Сервер ДОЛЖЕН генерировать контент, содержащий список доступных характеристик представления и соответствующих идентификаторов ресурсов, из которых пользователь или пользовательский агент может выбрать наиболее подходящий.

407 (Proxy Authentication Required) похож на 401 (не авторизован), но он указывает, что клиенту необходимо аутентифицировать себя, чтобы использовать прокси для этого запроса. Прокси ДОЛЖЕН отправить поле заголовка Proxy-Authenticate.

408 (Request Timeout) указывает на то, что сервер не получил полное сообщение с запросом в течение времени, которое он был готов ожидать.

409 (Conflict) указывает на то, что запрос не может быть выполнен из-за конфликта с текущим состоянием целевого ресурса. Этот код используется в ситуациях, когда пользователь может разрешить конфликт и повторно отправить запрос. Сервер ДОЛЖЕН генерировать контент, который включает достаточно информации, чтобы пользователь мог распознать источник конфликта.

410 (Gone) указывает на то, что доступ к целевому ресурсу больше невозможен на исходном сервере и что это состояние, скорее всего, будет постоянным. Если исходный сервер не знает, является ли состояние постоянным, вместо этого следует использовать код статуса 404 (Not Found). Нет необходимости отмечать все постоянно недоступные ресурсы как «исчезнувшие» — это остается на усмотрение владельца сервера.

411 (Length Required) указывает, что сервер отказывается принимать запрос без определенного Content-Length ( Раздел 8.6 ). Клиент МОЖЕТ повторить запрос, если он добавит допустимое поле заголовка Content-Length, содержащее длину содержимого запроса.

412 (Precondition Failed) указывает, что одно или несколько условий, указанных в полях заголовка запроса, оценены как ложные при проверке на сервере. позволяет клиенту устанавливать предварительные условия для текущего состояния ресурса (его текущих представлений и метаданных) и предотвращать применение метода запроса, если целевой ресурс находится в неожиданном состоянии.

413 (Content Too Large) указывает на то, что сервер отказывается обрабатывать запрос, поскольку контент запроса больше, чем сервер готов или может обработать. Если состояние временное, сервер ДОЛЖЕН сгенерировать поле заголовка Retry-After.

414 (URI Too Long) указывает на то, что сервер отказывается обслуживать запрос, поскольку целевой URI длиннее, чем сервер готов интерпретировать. 
Это редкое состояние может возникнуть только в том случае, если клиент неправильно преобразовал запрос POST в запрос GET с длинной информацией запроса, когда клиент попал в бесконечный цикл перенаправления (например, перенаправленный префикс URI, указывающий на суффикс самого себя) или когда сервер подвергается атаке со стороны клиента, пытающегося использовать потенциальные дыры в безопасности.

415 (Unsupported Media Type) указывает на то, что исходный сервер отказывается обслуживать запрос, поскольку содержимое имеет формат, не поддерживаемый этим методом на целевом ресурсе. Может быть связана с указанным в запросе Content-Type или Content-Encoding либо возникнуть в результате прямой проверки данных. Если проблема вызвана неподдерживаемой кодировкой контента, следует использовать поле заголовка ответа Accept-Encoding, чтобы указать верные.

416 (Range Not Satisfiable) указывает на то, что набор диапазонов в поле заголовка Range запроса отклонен потому, что диапазон не является выполнимым или клиент запросил чрезмерное количество диапазонов.

417 (Expectation Failed) ожидание, указанное в запросе Expect запроса не может быть удовлетворено.

418 (Unused) не используется, зарезервирован.

421 (Misdirected Request) указывает, что запрос был направлен на сервер, который не может или не желает выдавать авторитетный ответ для целевого URI. Исходный сервер или шлюз отправляет 421, чтобы отклонить целевой URI, который не соответствует источнику, для которого был настроен сервер или не соответствует контексту соединения

422 (Unprocessable Content) указывает на то, что сервер понимает тип содержимого запроса (следовательно, 415 не подходит), синтаксис содержимого запроса правильный, но не смог обработать содержащиеся в нем инструкции.
Например, если содержимое запроса XML содержит правильно сформированные (т. е. синтаксически правильные), но семантически (смысл команд) ошибочные инструкции XML.

426 (Upgrade Required) указывает на то, что сервер отказывается выполнять запрос с использованием текущего протокола, но может быть готов сделать это после того, как клиент обновит свой протокол до другого. Сервер ДОЛЖЕН отправить поле заголовка  Upgrade в ответе 426, чтобы указать требуемый протокол(ы).
HTTP/1.1 426 Upgrade Required
Upgrade: HTTP/3.0
Connection: Upgrade


Server Error 5xx

5xx Server Error указывает, что сервер знает, что он допустил ошибку или не может выполнить запрошенный метод. За исключением HEAD, сервер ДОЛЖЕН отправить представление, содержащее объяснение ситуации с ошибкой и является ли это временным или постоянным состоянием. 

500 (Internal Server Error) указывает на то, что сервер столкнулся с непредвиденным условием, которое не позволило выполнить запрос.

501 (Not Implemented) указывает на то, что сервер не поддерживает функциональность, необходимую для выполнения запроса. Это подходящий ответ, когда сервер, например, не распознает метод запроса.

502 (Bad Gateway) указывает на то, что сервер, выступая в качестве шлюза или прокси-сервера, получил недопустимый ответ от входящего сервера, к которому он обращался при попытке выполнить запрос.

503 (Service Unavailable) указывает на то, что сервер в настоящее время не может обработать запрос из-за временной перегрузки или планового обслуживания, которое, вероятно, будет устранено после некоторой задержки. Сервер МОЖЕТ отправить поле заголовка Retry-After, чтобы предложить клиенту соответствующее количество времени ожидания 

504 (Gateway Timeout) указывает на то, что сервер, выступая в качестве шлюза или прокси-сервера, не получил своевременного ответа от вышестоящего сервера, к которому ему необходимо было получить доступ для выполнения запроса.

505 (HTTP Version Not Supported) указывает на то, что сервер не поддерживает или отказывается поддерживать основную версию HTTP, которая использовалась в сообщении запроса. Сервер ДОЛЖЕН сгенерировать представление в котором описывается, почему эта версия не поддерживается и какие другие протоколы поддерживаются этим сервером.

Другие заметки

← К автору