Коды состояния ответа HTTP
Код ответа является сообщением, которое сервер отправляет клиенту в ответ на запрос. Стандартизированный код состояния состоит из трех цифр. Коды состояния ответа (response status codes) показывают, был ли успешно выполнен определённый HTTP запрос (request). Они определены в стандарте RFC 9110 и сгруппированы по группам:
- Информационные ответы, не ошибка (100 – 199)
- Успешные ответы, не ошибка (200 – 299)
- Сообщения о перенаправлении, не ошибка (300 – 399)
- Ошибки клиента (400 – 499)
- Ошибки сервера (500 – 599)
Информационные (100 – 199)
- 100 Continue - промежуточный ответ, указывающий, что клиент должен продолжить запрос или игнорировать этот ответ, если запрос уже завершен
- 101 Switching Protocols - отправляется в ответ на заголовок запроса Upgrade от клиента и указывает протокол, на который переключается сервер
- 102 Processing (WebDAV) - означает, что сервер получил и обрабатывает запрос, но ответа пока нет
- 103 Early Hints - код в первую очередь предназначен для использования с заголовком Link (предварительная загрузка ресурсов или предварительное соединение к источнику ресурсов, пока сервер готовит ответ)
Успешные (200 – 299)
- 200 OK - успешно выполненный запрос, успех» зависит от метода HTTP:
- GET: ресурс был получен и передан в теле сообщения
- HEAD: ответ содержит заголовки, но тела сообщения нет
- PUT или POST: ресурс, описывающий результат действия, передан в body сообщения
- TRACE: тело сообщения содержит сообщение запроса, полученное сервером
- 201 Created - запрос выполнен успешно, и в результате был создан новый ресурс. Обычно отправляется на запросы POST или PUT
- 202 Accepted - запрос получен, но еще не обработан. Этот код предназначен для случаев, когда запрос обрабатывается другим процессом или сервером, а также для пакетной обработки (т.к. в HTTP нет возможности позже отправить асинхронный ответ с результатом обработки запроса)
- 204 No Content - для этого запроса нет содержимого для отправки, но заголовки ответа могут быть полезны. Можно использовать для обновления закешированных заголовков, полученных ранее для этого ресурса
- 205 Reset Content - сообщает пользовательскому агенту, что необходимо сбросить отображение документа, который отправил этот запрос
Перенаправление (300 – 399)
- 300 Multiple Choices - у запроса более одного возможного ответа. Пользовательский агент или пользователь должен выбрать один из них
- 301 Moved Permanently - URL-адрес запрошенного ресурса был изменен навсегда. Новый URL-адрес указан в ответе в заголовке Location
- 302 Found - URI запрошенного ресурса был временно изменен. В будущем могут быть внесены дальнейшие изменения в URI. В ответе указывается новый адрес запрашиваемого URL
- 303 See Other - указывает, что запрошенная страница находится по другому адресу. Клиенту необходимо получить запрошенный ресурс по другому URI с помощью запроса GET
- 304 Not Modified - этот код используется для целей кэширования и означает, что страница не изменялась с момента последнего обращения робота. Ускоряет индексирование и экономит трафик
- 305 Use Proxy (устарело) - запрошенный ответ должен быть доступен через прокси. Код в настоящее время устарел из-за проблем безопасности, связанных с внутренней настройкой прокси-сервера
- 306 unused - этот код ответа зарезервирован. Использовался в предыдущей версии спецификации HTTP/1.1
- 307 Temporary Redirect - клиенту необходимо получить запрошенный ресурс по другому URI тем же методом, который использовался в предыдущем запросе. Имеет ту же семантику, что и код 302 Found, за исключением того, что пользовательский агент не должен изменять используемый метод
- 308 Permanent Redirect - ресурс теперь находится по другому URI, указанному в заголовке ответа Location. Имеет ту же семантику, что и код ответа 301 Moved Permanently, за исключением того, что пользовательский агент не должен изменять используемый метод
Ошибки клиента (400 – 499)
- 400 Bad Request - сервер не может или не будет обрабатывать "плохой" запрос. Ошибка возникает в случае, если клиент отправляет некорректный запрос (ошибка синтаксиса, формат или маршрутизация запроса)
- 401 Unauthorized - хотя стандарт определяет этот ответ как «неавторизованный», семантически он означает «неаутентифицированный». Это значит, что клиент должен аутентифицировать себя (допустим, ввести логин и пароль), чтобы получить запрошенный ответ
- 402 Payment Required - экспериментальная возможность, код ответа зарезервирован для использования в будущем. Изначальная цель - использование в цифровых платежных системах, но используется очень редко
- 403 Forbidden - клиент не имеет прав доступа к контенту, то есть он неавторизован, поэтому сервер отказывается предоставить запрошенный ресурс. В отличие от 401 Unauthorized, личность клиента известна серверу (т.е. клиент аутентифицирован, но не имеет прав для получения ответа)
- 404 Not Found - сервер не может найти запрошенный ресурс. В браузере это означает, что URL-адрес не распознан. В API это также может означать, что адрес правильный, но ресурс не существует
- 405 Method Not Allowed - метод запроса известен серверу, но не поддерживается целевым ресурсом. Например, API может не разрешать вызов DELETE для удаления ресурса, однако доступные методы API содержатся в ответе в заголовке Allow
- 406 Not Acceptable - сервер после выполнения согласования контента не нашёл содержимого, соответствующего критериям, заданным пользовательским агентом. Запрашиваемый контент не может быть распознан из-за кодировки, метода сжатия и др. причин
- 407 Proxy Authentication Required - этот код ответа похож на 401 Unauthorized, но аутентификация должна выполняться через прокси-сервер (сервер-посредник)
- 408 Request Timeout - означает, что сервер хотел бы закрыть это соединение, так как обработка запроса пользователя вышла за рамки установленного времени. Клиенту необходимо проверить интернет-соединение и обновить страницу. Некоторые серверы просто закрывают соединение, не отправляя это сообщение
- 409 Conflict - запрос конфликтует с текущим состоянием сервера или несовместим с другим запросом
- 410 Gone - запрошенное содержимое было удалено с сервера, и отсутствует возможность переадресации. Ожидается, что клиенты удалят свои кеши и ссылки на этот ресурс
- 411 Length Required - запрос отклонён, потому что сервер требует указание поля заголовка Content-Length, но оно не определено
- 412 Precondition Failed - клиент указал в заголовках запроса условия, которым сервер не соответствует
- 413 Payload Too Large - размер объекта запроса превышает ограничения, определенные сервером. Сервер может закрыть соединение или вернуть поле заголовка Retry-After. Веб-браузеры поддерживают запрос от 2 до 8 килобайт (неточно!)
- 414 URI Too Long - запрошенный клиентом URI слишком длинный для того, чтобы сервер смог его обработать.
- 418 I'm a teapot - «Шуточный» ответ: сервер отклоняет попытку заварить кофе, потому что он чайник. Первоапрельская шутка разработчиков, появившаяся в 1998 году. Не используется
- 429 Too Many Requests - пользователь превысил лимит запросов в определённый промежуток времени. Код применяется, прежде всего, из соображений безопасности.
Причины и способы устранения клиентских ошибок
Чтобы понять чем может быть вызвана ошибка запроса, нужно удостовериться в том, что всё программное обеспечение имеет актуальную версию (выбран верный стенд для работы клиент + сервер), обновлен браузер. Может помочь просмотр логов (журналов сервера) для понимания процессов обработки запросов. Веб-серверы Apache и Nginx сохраняют файлы access.log и error.log.
Также следует понимать, что описание кодов ошибок HTTP - это часть стандарта, но код ответа сервера во многом определяется тем, как программное обеспечение обрабатывает ту или иную ошибку (может быть изменен программистом).
-
Ошибка 400 Bad Request:
- Большое количество файлов cookies и данных в кэше. Как вариант - очистка кэша и файлов cookies
- Неисправности в браузере. Как вариант - расширения браузера, реинсталл браузера
- Неправильный HTTP-запрос из-за клиентской ошибки, например, при использовании curl
-
Ошибка 401 Unauthorized:
Появляется, если клиент пытается получить доступ к ресурсу, который защищен HTTP-авторизацией. Будет появляться до тех пор, пока клиент не пройдет аутентификацию (введет верные логин и пароль). Он внесен в файл .htpasswd -
Ошибка 403 Forbidden:
Этот код состояния сообщает клиенту, что у клиента нет прав на чтение файла, который он запрашивает. То есть пользователь не прошел авторизацию - процесс проверки прав доступа пользователя к определенным ресурсам или функциям. Другая причина появления кода ошибки 403 — намеренное использование файла .htaccess для того, чтобы установить запрет определенным IP-адресам на доступ к ресурсам. Поэтому в случае получения такого кода ошибки нужно проверить настройки файла .htaccess -
Ошибка 404 Not Found. Причин возникновения может быть много, основные:
- Корректность написания ссылки URL
- Существует вероятность, что запрашиваемый файл перемещен или удален из указанного места на сервере
- Опять же, проблема с авторизацией и доступом к ресурсам
- Некорректное расположение корневой (root) директории в конфигурации сервера
- Cервер не поддерживает символические ссылки
Ошибки сервера (500 – 599)
Эти ошибки не относятся к пользовательским и возникают на стороне сервера, когда сервер не может обработать запрос клиента или осуществить запрашиваемое действие.
- 500 Internal Server Error - на сервере произошла ошибка, в результате которой он не может успешно обработать запрос
- 501 Not Implemented - метод запроса не поддерживается сервером и поэтому он не может быть обработан. Методы GET и HEAD должны всегда поддерживаться сервером и для них не должен возвращаться этот код.
- 502 Bad Gateway - такой ответ может прислать сервер, который выступает в качестве шлюза, если в процессе обработки запроса он получил недопустимый ответ от целевого сервера (вышестоящего сервера). Основная причина — несогласованные протоколы сервера и посредника.
- 503 Service Unavailable - сервер не готов обработать запрос в данный момент. Распространёнными причинами являются техническое обслуживание или перегрузка сервера. Клиенту рекомендуется отправить запрос позднее
- 504 Gateway Timeout - такой ответ может прислать сервер, который выступает в качестве шлюза, если в процессе обработки запроса он не может получить ответ от целевого сервера в обозначенное в настройках время
- 505 HTTP Version Not Supported - используемая в запросе версия HTTP не поддерживается сервером
Устранение серверных ошибок
-
Ошибка 500 Internal Server Error. Основные причины:
- неправильные права доступа на папки и файлы, вызывающие невозможность запуска скрипта
- неправильная инструкция в файле .htaccess или неподдерживаемые директивы приводят к данному HTTP-статусу в ответ на запрос клиента
-
Ошибка 502 Bad Gateway. Если это обратный прокси-сервер (балансировщик нагрузки) необходимо проверить:
- backend сервера
- верно ли настроен обратный прокси и правильны ли настройках
- настройки сетевого соединения между серверами backend и обратным прокси-сервером
- проверить порты и отсутствие блокировки брандмауэром
- разрешения у сокетов и их корректность
-
Ошибка 504 Gateway Timeout. Основные причины:
- проблемы с сетью, слабое интернет-соединение между шлюзом и основным сервером
- перегрузка сервера-шлюза, большая нагрузка не позволяет быстро выполнить работу
- в настройках сервера указан короткий период ожидания ответа от шлюза