Краткий справочник кодов состояний HTTP

Сергей Почекутов

HTTPS Status Codes — это стандартизированные коды, которые веб-сервер возвращает в ответ на HTTP-запросы сетевых клиентов. Они помогают понять статус: было ли соединение успешным или такой страницы не существует, есть ли перенаправление или превышен таймаут. В этой статье — подробный список кодов ответов с понятным описанием.

Содержание:
1. 1xx: Informational (информационные)
2. 2xx: Success (успешно)
3. 3xx: Redirection (перенаправление)
4. 4xx: Client Error — ошибки со стороны клиента
5. 5xx: Server Error (ошибка сервера) — ошибки на стороне сервера
Заключение

1. 1xx: Informational (информационные)

В этом диапазоне возвращаются коды, которые информируют о процессе передачи данных. В версии HTTP 1.0 их следует игнорировать. В версии HTTP 1.1 этот класс сообщений принимают как обычный ответ, но отправлять серверу ничего не нужно.

Код Название Описание Версия
100 Continue Промежуточный ответ. Сообщает клиенту, что ему следует дальше пересылать заголовки. Если запрос уже выполнен, то ответ с кодом 100 можно игнорировать. HTTP/1.1
101 Switching Protocol Сервер предлагает изменить протокол. В ответе он предоставляет доступные варианты, которые указываются в заголовке Upgrade. Клиент может послать новый запрос, выбрав один из предложенных протоколов. HTTP/1.1
102 Processing Сервер обрабатывает запрос. HTTP/1.1
103 Early Hints Сервер сообщает ресурсы, которые доступны для ранней загрузки, пока готовится основной ответ. HTTP/1.1

2. 2xx: Success (успешно)

Коды в этом диапазоне сообщают, что запрос клиента получен, понят и принят.

Код Название Описание Версия
200 OK Успешное выполнение запроса. Информация зависит от метода, переданного клиентом. HTTP/0.9 и выше
201 Created Сервер выполнил запрос и создал новый ресурс. Стандартный ответ для методов POST и PUT. HTTP/0.9 и выше
202 Accepted Сервер принял запрос, но еще не обработал его. Не дает гарантий, что запрос успешно выполнится. Цель ответа — уведомить клиента, что запрос принят. HTTP/0.9 и выше
203 Non-Authoritative Information Отображается информация не из оригинального источника. Например, это данные из кеша или резервной копии, которые могли устареть. HTTP/0.9 и 1.1
204 No Content Запрос обработан, в ответе передаются только заголовки без тела сообщения. Например, при выполнении метода DELETE. В ответе также может быть информация, которая не отличается от переданной клиентом. HTTP/0.9 и выше
205 Reset Content Сервер обработал запрос и призывает клиента сбросить отправленные данные. HTTP/0.9 и 1.1
206 Partial Content Сервер выполнил часть GET-запроса. В ответ он передает ту часть, которую клиент указал в заголовке. HTTP/0.9 и 1.1
207 Multi-Status (WebDAV) Сервер передает результаты выполнения нескольких операций. RFC 4918
208 Already Reported (WebDAV) Включен в ответ 207. RFC 4918
226 IM Used Сервер принял заголовок A-IM и возвращает содержимое, учитывая параметры. HTTP/1.1

3. 3xx: Redirection (перенаправление)

Коды в этом диапазоне сообщают, что для успешного выполнения действия необходимо сделать другой запрос. Как правило, достаточно изменить URL. Перенаправление может выполняться и без запроса пользователя, если второй ресурс запрашивается методом GET или HEAD.

Код Название Описание Версия
300 Multiple Choices У запрошенного ресурса множество представлений. Каждое из них имеет собственное расположение. Вместе с ответом сервер показывает список альтернативных ресурсов. Клиент может выбрать вариант автоматически или предоставить выбор пользователю. HTTP/1.0 и выше
301 Moved Permanently Запрошенный документ перенесен на постоянной основе на другой URL. Будущие обращения должны выполняться по URL, который возвращается в ответе.Ответ по умолчанию кешируется. HTTP/0.9 и выше
302 Found Запрошенный ресурс временно перемещен на другой URL. Но клиенту следует использовать тот же URL, так как в любой момент перенаправление может измениться. По умолчанию ответ кешируется. HTTP/0.9 и выше
303 See Other Документ по указанному адресу может быть доступен по другому URL. Чтобы найти его, клиент должен передать в Location метод GET. Этот код появился вместе с 307, чтобы исключить неоднозначные ситуации. Сервер, отдавая код 303, уверен, что следующий ресурс будет запрошен методом GET. HTTP/0.9 и выше
304 Not Modified Сервер возвращает код 304, когда клиент запрашивает ресурс методом GET и использует заголовок If-Modified-Since или If-None-Match, но документ не изменен. В сообщении сервера приходит только заголовок, тела нет. HTTP/0.9 и выше
305 Use Proxy Для доступа к запрошенному ресурсу необходимо использовать прокси-сервер, который указан в Location. Многие HTTP-клиенты обрабатывают такой запрос некорректно по соображениям безопасности. В их числе — Mozilla Firefox и Internet Explorer. HTTP/1.1
306 (Unused) Код больше не используется, хотя был зарезервирован в ранних спецификациях. HTTP/1.1
307 Temporary Redirect Запрошенный ресурс временно находится на другом URL. Так как перенаправление может измениться в любой момент, клиенту следует продолжать использовать запрос URL дальше. Ответ по умолчанию не кешируются. Чтобы кешировать данные, в заголовках Cache-Control или Expires нужно прямо это указать. HTTP/1.1
308 Permanent Redirect (experimental) Сервер сообщает, что клиенту нужно повторить запрос на другой URL. Код ответа говорит о том, что ресурс перенаправлен на постоянной основе. Он находится в другом URL, который указан в заголовке Location. Черновик спецификации

4. 4xx: Client Error — ошибки со стороны клиента

Сервер не обработал запрос из-за синтаксической ошибки. Например, не хватает данных или есть проблемы с валидацией домена. Клиенту не следует повторять запрос без изменений, так как это снова приведет к появлению ошибки 400.

Код Название Версия
400 Bad Request HTTP/0.9 и выше
401 Unauthorized HTTP/0.9 и выше
402 Payment Required HTTP/0.9 и 1.1
403 Forbidden HTTP/0.9 и выше
404 Not Found HTTP/0.9 и выше
405 Method Not Allowed HTTP/1.1
406 Not Acceptable HTTP/1.1
407 Proxy Authentication Required HTTP/1.1
408 Request Timeout HTTP/1.1
409 Conflict HTTP/1.1
410 Gone HTTP/1.1
411 Length Required HTTP/1.1
412 Precondition Failed HTTP/1.1
413 Request Entity Too Large HTTP/1.1
414 Request-URL Too Long HTTP/1.1
415 Unsupported Media Type HTTP/1.1
416 Requested Range Not Satisfiable HTTP/1.1
417 Expectation Failed HTTP/1.1
418 I’m a teapot (RFC 2324) RFC 2324
420 Enhance Your Calm (Twitter) Twitter
422 Unprocessable Entity (WebDAV) RFC 4918
423 Locked (WebDAV) RFC 4918
424 Failed Dependency (WebDAV) RFC 4918
425 Reserved for WebDAV
426 Upgrade Required RFC 7231
428 Precondition Required RFC 6585
429 Too Many Requests RFC 6585
431 Request Header Fields Too Large RFC 6585
444 No Response (Nginx) Nginx
449 Retry With (Microsoft) Microsoft
450 Blocked by Windows Parental Controls (Microsoft) Microsoft
451 Unavailable For Legal Reasons RFC 7725
499 Client Closed Request (Nginx) Nginx

401: Unauthorized

Чтобы выполнить запрос, пользователь должен пройти аутентификацию. В заголовке ответа сервер передает перечень условий для аутентификации. Клиент может выполнить запрос повторно, добавив в него требуемые данные. Если такая информация изначально была в запросе, то ошибка 401 показывает, что авторизация отклонена.

402: Payment Required

Код зарезервировали для использования в будущем. В настоящий момент он не дает никакую полезную информацию. Код предусмотрен для платных пользовательских сервисов, а не для хостингов.

403: Forbidden

Сервер понял, что от него хочет пользователь, но отказывается выполнять запрос. Причина — у клиента ограничен доступ к запрашиваемому ресурсу. Если для доступа нужна аутентификация через HTTP, то сервер вернет ошибку 401 или 407.
Ошибка 403 говорит о том, что ограничения задал администратора сервера или разработчик веб-приложения. Обычно ошибка появляется при попытке открыть системные ресурсы.

404: Not Found

По указанному URL нет ресурсов. Это самая распространенная ошибка в интернете. Она появляется, когда пользователь, например, вводит неправильный адрес страницы. Еще одна причина — страница была по этому адресу, но затем ее удалили.

Также популярный статус 404 используют для маскировки, когда хотят скрыть истинную причину отказа от обработки запроса. Например, из соображений безопасности вместо 403 ошибки веб-приложения могут отдавать 404.

405: Method Not Allowed

Указанный метод нельзя применить к ресурсу. В ответе содержится список разрешенных методов. Сервер возвращает ошибку 405, если ему знаком переданный клиентом метод, но он не применяет его к указанному ресурсу. Если метод не применяется на всем сервере, то нужно возвращать ошибку 501.

406: Not Acceptable

Запрошенный ресурс не отвечает характеристикам, которые клиент передал в заголовках запроса. Если в запросе указан не метод HEAD, то сервер в ответе возвращает список допустимых характеристик.

407: Proxy Authentication Required

Код аналогичен 401, но сообщает, что пользователь должен пройти авторизацию через прокси. Прокси-сервер возвращает заголовок, в котором содержится запрос ресурса. Клиент может повторить запрос, указав в нем данные для авторизации.

408: Request Timeout

Клиент не отправил запрос в тот промежуток времени, когда сервер его ждал. Повторить запрос можно в любое время. Например, такая ситуация возникает при использовании методов POST и PUT. Источник данных перестает отвечать, сервер ждет продолжения, но через какое-то время прерывает соединение. Ответ не возвращается, если клиент принудительно остановил передачу данных.

409: Conflict

Конфликт в текущем состоянии ресурса мешает обработать запрос. Код возвращается только в тех случаях, когда ожидается, что пользователь в состоянии сам устранить проблему, после чего повторить запрос.
В идеале ответ также содержит информацию, которая помогает разрешить конфликт. Подобные проблемы возникают, например, при использовании метода PUT в случае, если версии отличаются.

410: Gone

Ресурс недоступен на сервере и новый адрес его местоположения неизвестен. Предполагается, что это постоянное состояние. Если сервер не знает или не может определить, постоянное это состояние или временное, он возвращает ошибку 404. Ответ 410 можно кешировать до тех пор, пока не появится другая информация.

411: Length Required

Сервер не принимает запрос, если в заголовке не указан Content-Length. Без заполнения этого поля нет смысле делать запрос повторно. Такой ответ возвращается при использовании методов POST и PUT.
Стандартная ситуация — при загрузке файлов оказывается, что на сервер стоит ограничение на объем. В таком случае разумнее сразу сообщить клиенту о превышении ограничения, разорвав соединение до начала загрузки.

412: Precondition Failed

Ответ с кодом 412 возвращается, если не было выполнено ни одно из условий, указанных в заголовке.

413: Request Entity Too Large

Сервер отказался обрабатывать запрос из-за слишком большого размера его тела. Чтобы прекратить дальнейшую передачу, сервер может закрыть соединение.

414: Request-URL Too Long

Сервер отказался обрабатывать запрос из-за слишком длинного URL. Это редкая ошибка, которая встречается, когда клиент передает параметры методом GET, а не POST. В итоге они все записываются в URL, который становится слишком длинным для обработки. Также ошибка используется для защиты от атак.

415: Unsupported Media Type

Сервер отказался обрабатывать запрос, так как в его теле содержатся данные с неподдерживаемым форматом. Например, клиент пытается передать на сервер изображение, а сервер ожидает текстовый файл.

416: Requested Range Not Satisfiable

Сервер возвращает ошибку, если ни одно из значений в заголовке Range запроса не совпало с размером выбранного ресурса, при этом в запросе не было заголовка If-Range. Например, клиент запрашивает часть файла, но сервер не может ее передать, потому что она находится за пределами конца файла.

417: Expectation Failed

Сервер не удовлетворяет значению поля Expect в заголовке запроса. Если ответ приходит от прокси, это значит, что он уверен в том, что вышестоящий сервер не сможет удовлетворить этот запрос клиента.

418: I’m a teapot (RFC 2324)

Код появился 1 апреля 1998 года как шутка. Ожидалось, что он не будет поддерживаться реальными серверами. Однако реализация кода состояния 418 существует. Например, Nginx использует его для имитации goto-подобного поведения.

420: Enhance Your Calm (Twitter)

Twitter Search и Trends API возвращают код состояния 420, когда клиент отправляет слишком много запросов. Этот номер использует только Twitter. Большинство серверов сигнализирует о большом количестве запросов ошибкой с номером 429.

422: Unprocessable Entity (WebDAV)

Сервер возвращает этот код, если синтаксически запрос был правильным, указанный вид данных поддерживается, но выполнить инструкции невозможно. Например, это может быть связано с семантическими ошибками.

423: Locked (WebDAV)

Статус говорит о том, что целевой ресурс недоступен для указанного метода. В ответе должно содержаться предусловие или постусловие, например, ‘lock-token-submitted’ или ‘no-conflicting-lock’.

424: Failed Dependency (WebDAV)

Статус 424 возвращается, если метод невозможно применить к ресурсу, так как запрошенное действие зависит от другого действия, выполнить которое не удалось.

425: Reserved for WebDAV

Статус зарезервирован для проекта WebDAV Advanced Collections Protocol.

426: Upgrade Required

Вместе с кодом 426 сервер отправляет, какие именно расширения используются для доступа к ресурсу. Клиент должен выбрать подходящий протокол.

428: Precondition Required

Исходный сервер требует, чтобы запрос был условным. Благодаря этому статусу можно предотвратить ситуацию, когда клиент получает состояние ресурса, изменяет его и отправляет обратно, при этом третья сторона меняет состояние на сервере, что приводит к конфликту.

429: Too Many Requests

Пользователь отправил слишком много запросов в указанный промежуток времени. В ответе должна быть информация об ограничениях. При этом серверы не обязаны использовать код 429, так как каждый ответ потребляет ресурсы. Вместо возвращения ошибки можно, например, разрывать соединение.

431: Request Header Fields Too Large

Сервер не обрабатывает запрос, потому что поля его заголовка слишком большие. После их уменьшения запрос можно повторить. Разработчики также использует этот ответ в том случае, если одно из полей заголовка повреждено. В этом случае необходимо указывать, какое именно поле стало причиной возвращения ошибки.

444: No Response (Nginx)

Код состояния, введенный Nginx. Он сигнализирует, что сервер не вернул данные и закрыл соединение. Используется, например, для защиты от вредоносных программ.

449: Retry With (Microsoft)

Расширение Microsoft, которое сообщает, что необходимо выполнить определенные действия, а затем повторить запрос.

450: Blocked by Windows Parental Controls (Microsoft)

Это расширение предложила компания Microsoft для лучшей работы функции родительского контроля. Если на Windows включен родительский контроль, то статус 450 появляется при попытке клиента перейти на запрещенную веб-страницу.

451: Unavailable For Legal Reasons

Сервер сообщает, что доступ к ресурсу закрыли по юридическим причинам. Наиболее близкий код — 403. 451 тоже сигнализирует, что сервер понял запрос, но отказывается его обрабатывать, например, из-за судебного запрета или по требованию органов государственной власти. Код состояния предложен Google в черновике IETF.

499: Client Closed Request (Nginx)

Этот код использует веб-сервер Nginx. Разработчики ввели его для логирования случаев, когда клиент закрывает соединения во время обработки запроса. Из-за закрытия соединения сервер не отправляет заголовок HTTP в ответ.

5. 5xx: Server Error (ошибка сервера) — ошибки на стороне сервера

Коды из этого диапазона возвращаются в случаях, когда сервер знает, что произошла ошибка или не может обработать запрос. При использовании всех методов, кроме HEAD, в теле ответа указывается объяснение ошибки.

Код Название Версия
500 Internal Server Error HTTP/0.9 и выше
501 Not Implemented HTTP/0.9 и выше
502 Bad Gateway HTTP/0.9 и выше
503 Service Unavailable HTTP/0.9 и выше
504 Gateway Timeout HTTP/1.1
505 HTTP Version Not Supported HTTP/1.1
506 Variant Also Negotiates (Experimental) RFC 2295
507 Insufficient Storage (WebDAV) RFC 4918
508 Loop Detected (WebDAV) RFC 5842
509 Bandwidth Limit Exceeded (Apache) Только cPanel
510 Not Extended RFC 2774
511 Network Authentication Required RFC 6585
598 Network read timeout error
599 Network connect timeout error

500 Internal Server Error

Сервер не обработал запрос, потому что столкнулся с неизвестными условиями. Универсальный код, который сообщает об исключении на стороне сервера.

501 Not Implemented

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

502: Bad Gateway

Сервер играл роль прокси-сервера или шлюза и получил некорректный ответ от вышестоящего сервера.

503: Service Unavailable

Сервер не обработал запрос из-за технических работ или перезагрузки. Если время восстановления известно, можно передать его в заголовке Retry-After.

504: Gateway Timeout

Сервер в роли прокси-сервера или шлюза не дождался ответа от вышестоящего сервера в рамках таймаута. Некоторые прокси возвращают статусы 400 и 500, когда DNS-запрос обрабатывается дольше таймаута.

505: HTTP Version Not Supported

Сервер не поддерживает или отказывается поддерживать версию HTTP, которую клиент передал в заголовке запроса. В ответе должно быть описание того, почему версия не поддерживается.

506: Variant Also Negotiates (Experimental)

Внутренняя ошибка конфигурации, из-за которой сервер указывает сам на себя.

507: Insufficient Storage (WebDAV)

Нет места для успешного выполнения запроса, некуда сохранить представление.

508: Loop Detected (WebDAV)

При выполнении запроса сервер обнаружил бесконечный цикл.

509: Bandwidth Limit Exceeded (Apache)

Веб-площадка превысила лимит на потребление трафика. Введен панелью управления хостингом cPanel, используется только ей.

510: Not Extended

Не соблюдена политика доступа. Сервер в ответ должен прислать информацию, которая поможет клиенту отправить расширенный запрос.

511: Network Authentication Required

Чтобы получить доступ к сети, клиенту нужно авторизоваться. В ответе должна содержаться ссылка на форму авторизации. Ответ посылает не сервер, которому предназначался запрос, а сервер-посредник — например, принадлежащий провайдеру.

598: Network read timeout error

Код не описан в стандарте, но используется некоторыми прокси для информирования об истечении таймаута при чтении.

599: Network connect timeout error

Код не описан в стандарте, но используется некоторыми прокси для информирования об истечении таймаута соединения.

Заключение

Необязательно помнить все коды статусов ответов. Самые распространенные вроде 200, 404, 403, 504 и так останутся в голове. Описания остальных ответов всегда можно посмотреть в документации.
Если хотите больше узнать о протоколе HTTP, его методах и кодах ответа, посмотрите это дополнительное видео:

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023