Краткий справочник кодов состояний 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) | |
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, его методах и кодах ответа, посмотрите это дополнительное видео:
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: