Назад

Коды ответов и ошибок сервера HTTP

Каждый раз, когда вы вводите адрес в браузере, кликаете по ссылке или отправляете форму, ваш браузер и сервер ведут интенсивный, но невидимый для вас диалог. Язык этого диалога — протокол HTTP, а слова в нем — коды состояний HTTP. Эти трехзначные числа — мощный инструмент для понимания того, что происходит «под капотом» веб-сайта. Они сообщают об успехе операции, перенаправляют пользователей, информируют об ошибках клиента и сигнализируют о проблемах на сервере.

Понимание HTTP-статусов — это не удел только программистов и системных администраторов. Знание основных кодов полезно веб-мастерам, SEO-специалистам, маркетологам и даже любознательным пользователям. Для владельцев сайтов это ключ к улучшению пользовательского опыта (UX), поисковой оптимизации (SEO) и общей стабильности ресурса. Правильная обработка ошибок, таких как знаменитая «404 Not Found», удерживает пользователей на сайте, а грамотные перенаправления (например, «301 Moved Permanently») сохраняют SEO-вес при переезде страниц.

Все коды делятся на пять классов, определяемых первой цифрой:

Информационные ответы - 1xx

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

100
Continue: запрос принят, всё в порядке, сервер принял запрос браузера, и скоро последует ответ. На это сообщение реагировать не нужно;
101
Switching Protocols: переключение протоколов. Этот код сервер отправляет браузеру в ответ на предложение переключиться на более подходящий протокол, которые был указан в заголовке Upgrade запроса клиента;
102
Processing: запрос обрабатывается. Код появляется, когда запрос получен, но для его обработки требуется время. После получения сообщения 102 браузер «понимает», что всё в порядке, сервер активен и скоро даст ответ. Серверу рекомендуется отправлять этот код, если время ожидания — более 20 секунд;
103
Early Hint: предварительный ответ. Код показывает, что сервер еще обрабатывает запрос, но в ответе он отправляет браузеру «подсказки» — адрес сайта или ссылки на ресурсы, которые нужно будет загрузить. То есть браузер уже может «подготовиться» к получению полного ответа, чтобы быстрее завершить операцию. Этот код состояния предназначен в основном для использования с заголовком Link;

Успешная обработка запроса - 2xx

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

200
OK: запрос успешно обработан. Один из самых популярных ответов. Он свидетельствует о том, что обмен данными между клиентом и сервером прошли успешно. Именно код ответа 200 ждут от ресурса, чтобы проверить, что все работает как надо;
201
Created: создано. Информирует об успешном создании нового ресурса в результате выполнения запроса. Например, была создан новый товар. Если сервер по каким-то причинам не смог обработать запрос и ресурс не был создан, то код ответа будет 202;
202
Accepted: принято. Запрос был получен, но еще не обработан. Он не является обязательным, поскольку в HTTP нет возможности отправить асинхронный ответ о результатах выполнения запроса. Он предназначен для случаев, когда запрос обрабатывает другой процесс или сервер;
203
Non-Authoritative Information: информация не авторитетна. Запрос обработан, но информация для его выполнения была взята не из исходного сервера, а из другого источника (например, резервной копии или кэша). Поэтому она может быть неактуальной. Это происходит, например, когда браузер запрашивает информацию, которая была удалена с исходного сервера, но сохранилась в кэше;
204
No Content: нет содержимого. Сообщает об успешном принятии и обработке запроса, а также о том, что у сервера нет содержимого для отправки пользователю только заголовки, в которых может быть важная информация;
205
Reset Content: сбросить содержимое. Запрос успешно выполнен, и браузер должен сбросить введенный контент. Это происходит, например, когда пользователь заполнил форму на сайте и нажал «Отправить». Код 205 подскажет браузеру, что нужно очистить форму, если вдруг пользователь захочет отправить другие данные.
206
Partial Content: частичное содержимое. Этот код ответа используется, когда клиент отправляет заголовок Range, чтобы запросить только часть ресурса — например, только первое видео со страницы;
207
Multi-Status: мультистатус. В ответе передается несколько статусов — в его теле могут быть другие сообщения с кодами 1хх, 2хх и т.д. Используется, чтобы предоставить информацию о нескольких ресурсах в тех случаях, когда для каждого из них может быть применено разное состояние (статус). Таким образом, он собирает информацию о нескольких ресурсах и их индивидуальных состояниях и предоставляет их в одном ответе;
208
Already Reported: уже сообщалось. Сервер сообщает клиенту, что некоторая информация уже была передана ранее и больше не нуждается в повторной передаче. Это полезно, чтобы избежать излишней передачи одних и тех же данных, особенно когда речь идет о множестве связанных ресурсов на сервере. Клиент может использовать этот ответ, чтобы оптимизировать свои запросы и избежать ненужных повторных передач данных. Это дополнительный код, который используется вместе с кодом 207 (Мультистатус), чтобы избежать конфликтов между запросами, а тело ответа было короче;
226
IM Used: использовано IM. Запрос успешно выполнен, но элемент недоступен в текущем состоянии и отправлен после совершения над ним определенных манипуляций. В некоторых случаях, чтобы доставить элемент пользователю, нужно будет его преобразовать;

Сообщения о перенаправлениях - 3xx

Эти коды сообщают клиенту, что для завершения запроса необходимо предпринять дополнительное действие, чаще всего — перейти по другому URL-адресу.

300
Multiple Choices: множественный выбор. По данному запросу есть несколько вариантов URL. Пользователь или браузер должен выбрать один из них;
301
Moved Permanently: перемещено навсегда. URL запрашиваемого ресурса был изменен навсегда. Новый URL будет предоставлен в ответе. 301 редирект также используемся вебмастерами для перенаправления сайта с http://www.mixtelecom.ru на http://mixtelecom.ru. Применяется при переходе на защищенный протокол с HHTP на HTTPS. Используется для защиты доступа к внутренним файлам, например, /index.php переправляется на главный адрес сайта. Некоторые хостинги и CMS автоматически включают данные редиректы при выборе соответствующих опций при настройке сайта. Некоторые браузеры некорректно ведут себя после получения кода, поэтому вместо него чаще используется 308;
302
Found: Найдено, Moved Temporarily: временно перемещено. Этот код ответа означает, что URI запрашиваемого ресурса был временно изменен. В будущем возможны дальнейшие изменения URI. Поэтому в последующих запросах клиент должен продолжать использовать измененный URI, который был предоставлен в ответе на данный запрос.;
303
See Other: смотреть другое. Указывает пользователю, что запрошенная страница находится по другому адресу и браузер должен запросить его адрес через метод GET;
304
Not Modified: не изменен. Этот ответ используется для целей кэширования. Он сообщает клиенту, что запрашиваемый ресурс не был изменен, поэтому клиент может продолжать использовать кэшированную версию ответа;
305
Use Proxy: используйте прокси. Сообщает пользователю, что запрашиваемый ресурс доступен только через прокси. Данные прокси указываются в заголовке ответа;
307
Temporary Redirect: временное перенаправление. Сервер посылает этот ответ, чтобы перенаправить клиента на получение запрашиваемого ресурса по другому URI с тем же методом, который был использован в предыдущем запросе. Он имеет ту же семантику, что и HTTP-ответ 302 Found, за исключением того, клиент не должен менять используемый HTTP-метод: если в первом запросе был использован метод POST, то во втором запросе также должен быть использован POST;
308
Permanent Redirect: постоянное перенаправление. Это означает, что ресурс теперь постоянно находится на другом URI, указанном в заголовке Location: HTTP Response header. Этот код имеет ту же семантику, что и код ответа 301 Moved Permanently HTTP, за исключением того, что клиент не должен изменять используемый метод HTTP: если в первом запросе использовался POST, то и во втором запросе должен использоваться POST;

Ошибки со стороны клиента - 4xx

Эти коды означают, что ошибка произошла на стороне клиента. Запрос содержит неправильный синтаксис или не может быть выполнен. Сервер при этом работает исправно.

400
Requested Host Unavailable: запрашиваемый хост недоступен. Ошибка свидетельствует от том, что сервер не понял запрос пользователя из-за ошибок клиента (например, неправильный синтаксис запроса);
401
Unauthorized: неавторизованный запрос. Хотя в стандарте HTTP указано слово “не авторизован”, семантически этот ответ означает “не аутентифицирован”. Это означает, что клиент должен пройти аутентификацию, чтобы получить запрошенный ответ;
402
Payment Required: зарезервирован для использования в будущем. Этот код ответа зарезервирован для будущего использования. Первоначальной целью создания этого кода было его использование в цифровых платежных системах. Однако, на данный момент он не используется;
403
Forbidden: запрещено. Клиент не имеет прав доступа к содержимому, т.е. он не авторизован, поэтому сервер отказывается предоставить запрашиваемый ресурс;
404
Not Found: не найдено. Сервер не может найти запрашиваемый ресурс. В браузере это означает, что URL не распознан. В API это также может означать, что эндпоинт действителен, но сам ресурс не существует. Этот код ответа, вероятно, наиболее известен, поскольку часто встречается в Интернете;
405
Method Not Allowed: недопустимый метод. Сервер знает о запрашиваемом методе, но он не может быть использован. Например, API может не разрешать вызов DELETE для удаления ресурса;
406
Not Acceptable: не поддерживается. Этот ответ отправляется, когда веб-сервер, выполнив server-driven content negotiation, не находит контента, соответствующего критериям, заданным клиентом;
407
Proxy Authentication Required: требует аутентификации прокси. Этот ответ аналогичен 401 Unauthorized, но требует аутентификации прокси;
408
Request Timeout: время ожидания истекло. Этот ответ посылается некоторыми серверами при неработающем соединении, даже без какого-либо предшествующего запроса со стороны клиента. Он означает, что сервер хочет завершить неиспользуемое соединение. Этот ответ используется гораздо чаще, поскольку некоторые браузеры, например Chrome, Firefox 27+ или IE9, используют механизмы предварительного соединения HTTP для ускорения серфинга. Также следует отметить, что некоторые серверы просто закрывают соединение без отправки этого сообщения;
409
Conflict: конфликт. Этот ответ отправляется, когда запрос противоречит текущему состоянию сервера;
410
Gone: удален. Этот ответ отправляется, когда запрашиваемый контент было окончательно удален с сервера без адреса пересылки. Клиенты должны удалить свои кэши и ссылки на ресурс;
411
Length Required: требуется указать длину. Сервер отклонил запрос, поскольку требуется указание заголовка Content-Length;
412
Precondition Failed: ложное условие. Клиент указал в своих заголовках условия, которые сервер не может выполнить;
413
Payload Too Large: полезная нагрузка слишком велика. Размер запроса превышает лимит, установленный сервером. Сервер может закрыть соединение, вернув поле заголовка Retry-After;
414
URL Too Long: URL слишком длинный. URI, запрошенный клиентом, слишком длинный для того, чтобы сервер мог его обработать;
415
Unsupported Media Type: тип медиа не поддерживается. Формат запрашиваемых данных не поддерживается сервером, поэтому сервер отклоняет запрос;
416
Range Not Satisfiable: диапазон не достижим. Диапазон, указанный в поле заголовка Range в запросе, не может быть обработан. Возможно, он выходит за пределы переданного URI;
417
Expectation Failed: значение Expect не может быть обработано. Этот код ответа означает, что ожидание, указанное в поле заголовка запроса Expect, не может быть выполнено сервером;
418
I’m a teapot / Я — чайник. Сервер отклоняет попытку заварить кофе с помощью чайника (является шутливым и нестандартным кодом ответа. Он не выполняет реальных действий на сервере и используется исключительно в юмористических или тестовых целях.);
419
Authentication Timeout: dремя ожидания аутентификации истекло. Может использоваться в дополнение к коду 401 для тех ресурсов, где аутентификации клиента не хватает для полноценного доступа;
421
Misdirected Request: неверно адресованный запрос. Сервер, на который был отправлен запрос, не может предоставить ответ на этот запрос, потому что он не настроен для обработки данного типа запросов или не понимает их;
422
Unprocessable Entity: необрабатываемый экземпляр. Запрос был правильно сформулирован, но не смог быть выполнен из-за семантических ошибок;
423
Locked: заблокировано. Ресурс, к которому осуществляется доступ, заблокирован;
424
Failed Dependency: невыполненная зависимость. Текущий запрос завершился неудачей из-за проблемы или ошибки, которая произошла в предыдущем запросе;
425
Too Early: слишком рано. Сервер отказывается выполнять запрос, потому что есть риск, что этот запрос может быть повторно отправлен, что может привести к нежелательным или небезопасным последствиям;
426
Upgrade Required: требуется обновление. Сервер отказывается выполнять запрос по текущему протоколу, но готов сделать это после того, как клиент перейдет на другой протокол. Сервер посылает заголовок Upgrade в ответе 426, чтобы указать требуемый протокол;
428
Precondition Required: требуется указать условия. Этот ответ предназначен для предотвращения проблемы “потери обновления” (lost update), когда клиент получает состояние ресурса c помощью GET, изменяет его и отправляет обратно на сервер с помощью PUT, а в это время третья сторона также изменяет состояние на сервере, что приводит к конфликту;
429
Too Many Requests: слишком много запросов. Пользователь отправил слишком много запросов за определенный промежуток времени;
431
Request Header Fields Too Large: заголовок слишком большой. Сервер не хочет обрабатывать запрос, поскольку поля его заголовка слишком длинные. Запрос может быть отправлен повторно после уменьшения размера полей заголовка запроса;
434
Requested Host Unavailable: запрашиваемый хост недоступен. Сервер не нашел данных об отправленном HTTP-коде;
444
No response: нет ответа. Используется сервером Nginx, если сервер закрыл соединение без отправки данных — например, при возникновении внутренней ошибки;
449
Retry with: повторить с... Данных в запросе недостаточно для получения ответа. Нужно дополнить запрос указанными сервером данными. Обычно используется в программах Microsoft;
450
Blocked by Windows Parental Controls: заблокировано «Родительским контролем». Ошибка появляется при попытке зайти на «взрослые» ресурсы с детского аккаунта;
451
Unavailable For Legal Reasons: недоступно по юридическим причинам. Клиент запросил ресурс, который не может быть предоставлен по закону, например, веб-страницу, подвергнутую государственной цензуре;
456
Unrecoverable Error: ошибка без возможности восстановления. При запросе клиента возникают ошибки в таблицах баз данных — такое может происходить, если запрос составлен некорректно;
499
Client Closed Request: клиент закрыл запрос. Используется сервером Nginx, если клиент закрыл соединение, пока сервер обрабатывал запрос;

Ошибки на стороне сервера - 5xx

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

500
Internal Server Error: внутренняя ошибка сервера. Сервер столкнулся с ситуацией, которую он не знает, как решить;
501
Not Implemented: не реализовано. Сервер не поддерживает метод запроса и не знает, как его обработать. В некоторых случаях он может отправить в теле ответа указание попробовать позднее;
502
Bad Gateway: ошибочный шлюз. Вышестоящий сервер отправил недействительный ответ. Такое может произойти, например, из-за несогласованных протоколов или неправильных параметров запроса;
503
Service Unavailable: сервис недоступен. Сервер пока не может обрабатывать запросы — например, из-за технических работ. В некоторых случаях в теле ответа указано время, через которое можно повторить запрос;
504
Gateway Timeout: шлюз не отвечает. Сервер не получил ответа от вышестоящего сервера — например, из-за проблем с соединением;
505
HTTP Version Not Supported: HTTP версия не поддерживается. Сервер не поддерживает версию HTTP — например, если она устарела;
506
Variant Also Negotiates. Это означает, что на сервере произошла ошибка из-за неправильной конфигурации;
507
Insufficient Storage: переполнения хранилища. Это означает, что сервер не может выполнить определенный метод (например, PUT или POST) на запрашиваемом ресурсе, потому что у него нет возможности сохранить информацию, которая необходима для успешного завершения этого запроса. Сервер не может обработать запрос, так как у него не хватает места или ресурсов для сохранения необходимых данных или представления;
508
Loop Detected / Обнаружен цикл. Сервер отменил выполнение операции, так как при обработке запроса образуется бесконечный цикл;
509
Bandwidth Limit Exceeded: исчерпана пропускная ширина канал. Сервер не может обработать запрос, так как его пропускная ширина превысила лимит. Используется, если у ресурса стоит ограничение на потребление трафика;
510
Not Extended: расширение отсутствует. Сервер не может обработать запрос, так как его расширение не поддерживается. Клиент запрашивает расширение, которого нет у сервера. В ответе сервер указывает список доступных расширений;
511
Network Authentication Required: требуется аутентификация в сети. Такой ответ отправляет сервер-посредник. Например, интернет-провайдер так сообщает клиенту, что нужно ввести пароль для доступа к сети;