В мире веб-разработки, коды ошибок HTTP играют ключевую роль, влияя на пользовательский опыт и репутацию сайта. В данной статье мы представим полный список кодов ошибок сервера, разберем их значения и узнаем, как эффективно интерпретировать коды ответа сервера для решения проблем и оптимизации работы веб-приложений.
Что такое код ответа HTTP
Код ответа HTTP - это язык веб-серверов, переводящий запросы браузеров в понятные инструкции. Он словно поэт, отвечающий на виртуальные вопросы, присваивая им смысл и направление. Коды ответа - это не всегда коды ошибок HTTP. Например, "200 OK" - это всё благополучно, а HTTP Error "404 Not Found" - это когда страница потеряна в виртуальных просторах. Каждый код - это своеобразное выражение состояния сервера, расшифровка которого позволяет понять, что происходит на обратной стороне виртуального мира.
Коды 1xx (Информационные)
Коды состояния 1xx в протоколе HTTP являются своего рода первым звеном в диалоге между сервером и клиентом. Вместо полного ответа на запрос, они предоставляют информацию о текущем статусе, делая обмен данными более эффективным. Взглянем на них детальнее:
100 Continue (Продолжить). Код ответа HTTP, при котором сервер дает "зеленый свет" пользователю, позволяя ему безопасно продолжить отправку большого запроса.
101 Switching Protocols (Переключение протоколов). Сервер сообщает клиенту, что он меняет правила игры, переходя, например, с HTTP на более защищенный HTTPS. В данном случае, заголовок "Upgrade" используется для смены протокола.
102 Processing (Обработка). Этот код – словно сообщение о том, что сервер принял запрос, но еще занят сложной операцией.
103 Early Hints (Предварительные намеки). Здесь сервер отправляет клиенту несколько индикативных заголовков до основного ответа, предостерегая о том, что может быть актуально в ближайшем будущем.
Коды 2xx (Успешные)
Коды ошибок HTTP из группы 2xx указывают на успешное выполнение запроса со стороны сервера. Они, по сути, выступают в роли "зеленого света" в контексте веб-коммуникаций, подтверждая, что все идет по заданному плану и успешно завершено.
200 OK (Хорошо). Когда сервер без проблем обрабатывает запрос методом GET и в ответ возвращает запрошенные данные, используется этот статус. Заголовок "Content-Type" сообщает о типе содержимого в ответе. Он просто сообщает клиенту об успешном запросе.
201 Created (Создано). Здесь сервер объявляет о создании нового ресурса.
202 Accepted (Принято). Сервер дает пользователю знать, что запрос принят, но для ответа потребуется время.
203 Non-Authoritative Information (Неавторитетная информация). Этот код предоставляет клиенту данные, которые, возможно, не являются официальными, но они пригодны для сравнения.
204 No Content (Нет содержимого). Сервер обработал запрос, но не возвращает никакого дополнительного контента.
205 Reset Content (Сбросить содержимое). Здесь клиенту указывается сбросить текущий просмотр или данные после отправки.
206 Partial Content (Частичное содержимое). В данном случае указано, что в ответе содержится только часть запрошенного контента. Заголовок "Content-Range" указывает на диапазон частичного содержимого.
207 Multi-Status (Многостатусный). Сервер успешно выполнил многооперационный запрос от клиента, и в ответе содержится информация о статусе каждой из операций.
226 IM Used (Использовано IM). Этот код говорит о том, что сервер использовал метод Incremental Metadata (IM) и в ответ передал клиенту только измененные части ресурса.
Коды 3xx (Перенаправления)
Коды 3xx в протоколе HTTP подобны указателям, которые руководят пользователем к новому местоположению ресурса. Они информируют клиента о необходимости выполнить дополнительные действия для получения запрашиваемого контента или перенаправления на другой ресурс. Погрузимся в подробности каждого из них:
300 Multiple Choices (Множество вариантов). Клиент, в качестве ответа, получает сигнал, что существует несколько возможных местоположений для ресурса, и ему предоставляется выбор. В текущих обстоятельствах, заголовок "Location" может указывать на альтернативные варианты ресурса.
301 Moved Permanently (Перемещено навсегда). Сервер сообщает пользователю ответ, что ресурс был окончательно перемещен в другое местоположение.
302 Found (Найдено). Этот HTTP код подобен временному перенаправлению. Сервер информирует потребителя, что ресурс временно доступен по иному URL. Заголовок "Location" указывает на новый URI для временного перенаправления.
303 See Other (Смотреть другое). Клиенту сообщается, что ресурс доступен по другому URL, и должен выполнить GET-запрос по этому новому адресу.
304 Not Modified (Не изменено).Этот статус говорит клиенту о том, что ресурс остается неизменным с момента последнего запроса, и повторная загрузка не требуется. При запросе, заголовок "If-Modified-Since" используется для проверки, был ли изменен ресурс.
305 Use Proxy (Использовать прокси). В качестве ответа, сервер сообщает, что он должен использовать указанный прокси для доступа к запрошенному ресурсу.
306 (зарезервировано) - Код был зарезервирован, но на практике не используется.
307 Temporary Redirect (Временное перенаправление). Этот код аналогичен 302 Found, но требует, чтобы клиент оставался в методе запроса, который был использован в первоначальном запросе.
308 Permanent Redirect (Постоянное перенаправление). Указывает, что ресурс был постоянно перемещен на новый URI, и клиент должен использовать новый URI для всех будущих запросов.
Ошибка HTTP 4xx (Клиентские ошибки)
Коды ошибок HTTP 4xx обозначают ошибки клиента. Это означает, что проблема возникла на стороне пользователя, например, веб-браузера или приложения.
400 Bad Request (Плохой запрос). Сервер не может обработать запрос из-за синтаксических ошибок, неверных данных или других ошибок со стороны клиента.
401 Unauthorized (Неавторизован). Клиент не предоставил необходимые учетные данные или аутентификация не прошла успешно. Заголовок "WWW-Authenticate" может быть использован для запроса аутентификации.
402 Payment Required (Требуется оплата). Код на данный момент не активен и зарезервирован для будущего использования. В перспективе он может указывать на необходимость оплаты перед доступом к ресурсу.
HTTP Error 403 Forbidden (Запрещено). Клиент не имеет достаточных прав для доступа к запрашиваемому ресурсу.
404 Not Found (Не найдено). Запрашиваемый ресурс отсутствует на сервере. Является одной из самых частых пользовательских ошибок.
405 Method Not Allowed (Метод не разрешен). Сервер не поддерживает указанный метод в запросе для данного ресурса. При данном коде, заголовок "Allow" указывает на разрешенные методы для ресурса.
406 Not Acceptable (Неприемлемо). Сервер не может предоставить данные в формате, который может быть принят клиентом.
407 Proxy Authentication Required (Требуется аутентификация прокси). Для доступа к запрашиваемому ресурсу требуется аутентификация на прокси-сервере.
408 Request Timeout (Время ожидания запроса истекло). Сервер ожидал получение запроса от клиента, но время ожидания истекло. Заголовок "Retry-After" может указывать на время, через которое можно повторить запрос.
409 Conflict (Конфликт). Запрос не может быть выполнен из-за конфликта с текущим состоянием ресурса.
410 Gone (Ушел). Запрашиваемый ресурс ранее существовал, но теперь удален, и не ожидается его восстановления.
411 Length Required (Требуется указать длину). Сервер требует указания длины содержимого в запросе; отсутствие этой информации рассматривается как ошибка.
412 Precondition Failed (Предварительное условие не выполнено). Предварительное условие в запросе не соблюдено, что мешает его выполнению.
413 Payload Too Large (Тело запроса слишком велико). Размер данных в запросе превышает установленные сервером ограничения.
414 URI Too Long (URI слишком длинный). Длина URI в запросе превышает допустимые границы.
415 Unsupported Media Type (Неподдерживаемый тип медиа). Сервер не может обработать предоставленный в запросе тип данных.
416 Range Not Satisfiable (Диапазон не удовлетворен). Ошибка HTTP, при котором запрашиваемый диапазон не соответствует текущим данным на сервере.
417 Expectation Failed (Ожидание не выполнено). Ожидаемое условие в заголовке "Expect" не было выполнено.
418 I'm a teapot (Я - чайник). Этот код введен в шутку и не предполагает реальных действий для пользователя или сервера, а также не является полноценной ошибкой. Он указывает на то, что сервер является чайником и не способен приготовить кофе.
421 Misdirected Request (Неверное направление запроса). Сервер не обрабатывает запрос из-за ошибки в запросе или конфигурации сервера.
422 Unprocessable Entity (Невозможно обработать сущность). Сервер понимает запрос, но не обрабатывает его из-за ошибок в данных.
423 Locked (Заблокировано). Ресурс заблокирован и не может быть обработан.
424 Failed Dependency (Сбой зависимости). Запрос зависит от неисполненного другого запроса.
425 Too Early (Слишком рано). Сервер не готов обработать запрос из-за его раннего поступления.
426 Upgrade Required (Требуется обновление). Сервер требует использовать более современный протокол для обработки запроса.
428 Precondition Required (Требуется предварительное условие). Сервер требует указания определенных предварительных условий в запросе.
429 Too Many Requests (Слишком много запросов). Клиент отправил слишком много запросов за короткое время, превышая ограничения сервера.
431 Request Header Fields Too Large (Слишком большие заголовки запроса). Заголовки запроса превышают максимально допустимый размер.
449 Retry With (Повторить с). Указывает, что запрос не может быть выполнен текущим сервером, но может быть успешно обработан другим сервером, и клиенту следует повторить запрос с указанием нового URI.
451 Unavailable For Legal Reasons (Недоступно по юридическим причинам). Ресурс недоступен из-за юридических ограничений.
499 Client Closed Request (Клиент закрыл запрос). Сервер получил запрос, но соединение было закрыто клиентом до завершения обработки.
Ошибка HTTP 5xx (Серверные ошибки)
Коды ошибок HTTP 5xx свидетельствуют о проблемах на стороне сервера. Эти коды указывают на проблемы, произошедшие на стороне сервера, что делает сервер неспособным корректно обработать запрос пользователя. Давайте рассмотрим их ближе:
HTTP Error 500 Internal Server Error (Внутренняя ошибка сервера). Сервер сталкивается с неожиданными обстоятельствами, из-за которых он не в состоянии выполнить запрос. Заголовок "Server" может указывать на сервер, на котором произошла ошибка.
501 Not Implemented (Не реализовано). Сервер не поддерживает функциональность, необходимую для выполнения запроса клиента. Заголовок "Via" может указывать прокси-сервер, через который произошла ошибка.
502 Bad Gateway (Плохой шлюз). Этот код означает, что сервер, выступая в роли посредника, получил некорректный ответ от другого сервера.
503 Service Unavailable (Сервис недоступен). Сервер временно не в состоянии обрабатывать запросы.
504 Gateway Timeout (Время ожидания шлюза истекло). Сервер, действуя в качестве посредника, не получил своевременный ответ от другого сервера.
505 HTTP Version Not Supported (Версия HTTP не поддерживается). Сервер не поддерживает версию протокола HTTP, указанную в запросе. В качестве вспомогательного средства, заголовок "Upgrade" может указывать на поддерживаемые протоколы.
506 Variant Also Negotiates (Также вариант согласовывается). Этот статус не используется в HTTP/1.1; однако, если сервер обнаруживает внутреннюю конфигурацию, которая приводит к неоднозначности в согласовании содержимого, он может использовать этот ответ.
507 Insufficient Storage (Недостаточно места для хранения). Сервер не может выполнить запрос из-за недостатка места для хранения на сервере.
508 Loop Detected (Обнаружено зацикливание). Сервер обнаружил зацикливание при обработке запроса, и чтобы избежать бесконечного цикла, отказывается от выполнения запроса.
509 Bandwidth Limit Exceeded (исчерпана пропускная ширина канала). Ошибка возникает, когда пропускная ширина канала сервера превышена из-за высокого объема запросов или трафика.
510 Not Extended (Не расширено). Клиент должен передать дополнительные расширения для продолжения запроса.
511 Network Authentication Required (Требуется сетевая аутентификация). Клиент должен аутентифицировать себя для получения доступа к сети.
Как проверить код состояния страницы
В этом разделе мы рассмотрим три основных способа проверки кода состояния страницы: через командную строку, с помощью веб-браузера и с использованием сторонних онлайн-сервисов. Каждый из этих методов имеет свои преимущества и может быть полезен в различных ситуациях.
Проверка ответа сервера через командную строку
Командная строка предоставляет удобный способ проверить код состояния страницы без необходимости использования веб-браузера. Для данного метода, требуется открыть командную строку и воспользоваться командой:
curl -I http://адрес-страницы
Эта команда отправляет HEAD-запрос (запрос только заголовков) на указанный URL и выводит информацию, включая код состояния HTTP:
В указанном примере рассмотрен успешый код ответа. В случае ответа, который содержит код ошибки, например, HTTP Error 404 Not Found, результат будет выглядеть аналогично:
Проверка ответа сервера через консоль браузера
Консоль разработчика в веб-браузере предоставляет инструменты для выполнения различных операций, включая проверку кода состояния страницы. Для того, чтобы увидеть код HTTP в ответе сервера, необходимо открыть консоль разработчика (Ctrl+Shift+K) или (Ctrl+shift+J) в зависимости от используемого браузера. Далее требуется выбрать раздел «сеть» и выполнить загрузку нужной страницы:
Проверка ответа сервера при помощи сторонних инструментов
Существует большое количество сторонних онлайн-сервисов, которые предоставляют инструменты для проверки кода состояния страницы веб-сайта. Эти сервисы обычно позволяют вам быстро получить обзор доступности и производительности вашего ресурса. Все они работают по одинаковому принципу. Мы в качестве примера рассмотрим самый популярный ресурс httpstatus.io
Для начала необходимо открыть сам сервис, после чего ввести адрес страницы, ответ которой необходимо узнать и запросить проверку:
В нижней части страницы отобразится результат:
Заключение
В заключение, хочется подчеркнуть, что понимание и умение читать коды ошибок HTTP - это ключевой навык для всех, кто занимается веб-разработкой и обслуживанием серверов. Разбирая каждую ошибку и изучая инструменты для их обнаружения, мы приходим к осознанию, насколько важно эффективно управлять этими аспектами веб-сервисов