Коды ошибок HTTP: расшифровка и устранение

При обращении к веб-серверу или приложению каждый поступивший HTTP-запрос получает в качестве ответа код  состояния HTTP (англ. HTTP status code). Коды состояния HTTP – это трехзначные коды, сгруппированные в пять различных классов. Класс кода состояния можно определить по первой цифре:

  • 1хх – информационные коды;
  • 2хх – успех;
  • 3хх – перенаправление;
  • 4хх – ошибка клиента;
  • 5хх – ошибка сервера.

Это руководство фокусируется на выявлении и устранении наиболее часто встречающихся кодов ошибок HTTP (то есть кодов состояния 4xx и 5xx) с точки зрения системного администратора. В некоторых ситуациях веб-сервер отвечает на запрос определенным кодом ошибки; рассмотрим общие возможные причины и решения.

Краткий обзор ошибок клиента и сервера

Ошибки клиента (коды состояния HTTP 400-499) возникают из-за HTTP-запросов, отправленных клиентом (веб-браузером или другим клиентом HTTP). Хотя данные типы ошибок связаны непосредственно с клиентом, системному администратору полезно знать, с какими кодами ошибок может столкнуться пользователь, чтобы определить, можно ли решить эту проблему в конфигурациях сервера.

Ошибки сервера (коды состояния HTTP 500-599) возникают тогда, когда веб-сервер не в состоянии обработать запрос из-за какой-либо ошибки или сбоя.

Общие советы по устранению ошибок HTTP

  • При использовании веб-браузера для тестирования веб-сервера не забудьте обновить браузер после внесения изменений в настройки сервера.
  • Проверяйте логи сервера, чтобы получить подробные сведения о том, как сервер обрабатывает запросы. Например, веб-серверы Apache и Nginx создают два файла по имени access.log и error.log, в которых можно найти соответствующую информацию.
  • Запомните: определения кодов состояния HTTP являются частью стандарта, который реализуется обслуживающим запросы приложением. Это означает, что фактический код состояния, который возвращается в результате, зависит от того, как программное обеспечение сервера обрабатывает конкретную ошибку.

Ознакомившись с основными понятиями кодов состояния HTTP, приступим к обзору наиболее часто встречающихся ошибок.

Ошибка 400 Bad Request

Код статуса 400, или ошибка Bad Request («неверный запрос») означает, что синтаксис запроса HTTP, отправленного на сервер, неверен.

Как правило, причины возникновения ошибки 400 Bad Request таковы:

  • Куки пользователя, связанные с сайтом, повреждены. Чтобы решить эту проблему,, попробуйте очистить кэш браузера и файлы cookie.
  • Искаженный запрос из-за неисправного браузера.
  • Искаженный запрос из-за ошибки пользователя при формировании HTTP-запроса вручную (например, неправильное использование curl).

Ошибка 401 Unauthorized

Код статуса 401, или ошибка Unauthorized («неавторизован») значит, что пользователь, пытающийся получить доступ к ресурсу, не прошел авторизацию (или не смог пройти ее, указав неверные учетные данные). Чтобы иметь возможность просматривать защищенный ресурс, пользователь должен предоставить корректные учетные данные.

Например, ошибка 401 Unauthorized может возникнуть, если пользователь пытается получить доступ к ресурсу, который защищен HTTP-авторизацией (как в этом руководстве по Nginx). В подобной ситуации ошибка 401 будет появляться снова и снова до тех пор, пока пользователь не предоставит корректный логин и пароль (который внесен в файл .htpasswd).

Ошибка 403 Forbidden

Код состояния 403, или ошибка Forbidden («запрещено») значит, что запрос пользователя был отправлен верно, но сервер отказывается обслуживать его в связи с отсутствием разрешения на доступ к запрашиваемому ресурсу. В этом разделе описаны наиболее распространенные причины возникновения ошибки 403.

Права на файл

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

Чтобы привести пример устранения ошибки 403, предположим, что:

  • пользователь пытается получить доступ к индексному файлу (http://example.com/index.html);
  • рабочий процесс веб-сервера принадлежит пользователю www-data;
  • индексный файл на сервере находится в /usr/share/nginx/html/index.html.

Итак, если пользователь получает ошибку 403 Forbidden, убедитесь, что пользователь www-data имеет права на чтение файла. Как правило, в подобной ситуации нужно просто изменить права на файл. Это можно сделать несколькими способами, но в данном случае подойдет вот эта команда:

sudo chmod o=r /usr/share/nginx/html/index.html

Файл .htaccess

Еще одна потенциальная причина возникновения ошибки 403 (часто это делается намеренно) – использование файла .htaccess. При помощи файла .htaccess можно запретить конкретным IP-адресам (или диапазонам адресов) доступ к определенным ресурсам.

Если пользователи неожиданно получают ошибку 403 Forbidden, убедитесь, что она не была вызвана настройками файла .htaccess.

Несуществующий индексный файл

Если пользователь пытается получить доступ к каталогу, который не имеет стандартного индексного файла, а листинг каталога (directory listing) отключен, веб-сервер будет возвращать ошибку 403 Forbidden. Такое случится, если, например, пользователь попытается получить доступ к каталогу http://example.com/emptydir/, а в каталоге emptydir на сервере нет индексного файла. Листинг каталога можно включить в конфигурациях сервера.

Ошибка 404 Not Found

Код статуса 404, или ошибка Not Found («не найдено») значит, что пользователь может взаимодействовать с сервером, но требуемый файл или ресурс отсутствует.

Ошибки 404 могут возникнуть в самых различных ситуациях. Ниже приведен список советов, которые помогут устранить проблему в случае, если пользователь неожиданно получил 404 Not Found:

  • Проверьте ссылку, которая направляет пользователя на сервер, на наличие ошибок или опечаток.
  • Возможно, пользователь ввел неверный URL.
  • Может быть, нужного файла не существует в указанном месте на сервере; убедитесь, что запрашиваемый ресурс не был перемещен или удален с сервера.
  • Проверьте, правильно ли указано местонахождение корневого каталога (document root) в конфигурации сервера.
  • Возможно, пользователь, которому принадлежит рабочий процесс веб-сервера, не имеет соответствующих прав, чтобы открыть каталог, в котором находится запрашиваемый файл. Для доступа к каталогу нужны права на чтение и выполнение.
  • Если пользователь переходит к ресурсу по символической ссылке, убедитесь, что веб-сервер настроен для поддержки символических ссылок.

Ошибка 500 Internal Server Error

Код состояния 500, или ошибка Internal Server Error («внутренняя ошибка сервера») означает, что сервер не может обработать запрос по неизвестной причине. Иногда этот код появляется в ситуациях, когда более подходящими являются  другие сообщения об ошибках 5xx.

Как правило, причиной данной ошибки является неправильная настройка сервера (например, искаженный файл .htaccess) или нехватка некоторых пакетов (к примеру, запуск файла PHP без предварительно установленного PHP).

Ошибка 502 Bad Gateway

Код состояния 502, или ошибка Bad Gateway («ошибочный шлюз») значит, что запрашиваемый сервер является шлюзом или прокси-сервером, и он не получает валидных ответов от серверов бэкэнда, которые на самом деле выполнили запрос.

Если речь идет об обратном прокси-сервере (например, о балансировщике нагрузки), убедитесь, что:

  • с серверами бэкэнда (на которые пересылаются HTTP-запросы) все в порядке;
  • обратный прокси настроен правильно, в его настройках указаны корректные бэкэнды;
  • сетевое соединение между серверами бэкэнда и обратным прокси-сервером в порядке. Если серверы могут взаимодействовать на других портах, убедитесь, что эти порты не заблокированы брандмауэром;
  • нужные сокеты существуют в корректном местонахождении и имеют соответствующие разрешения (если веб-приложение настроено слушать сокеты).

Ошибка 503 Service Unavailable

Код состояния 503, или ошибка Service Unavailable («сервис недоступен») означает, что сервер перегружен или находится на обслуживании; такой сервис должен стать доступным в течение некоторого времени.

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

Ошибка 504 Gateway Timeout

Код состояния 504, или ошибка Gateway Timeout («шлюз не отвечает») значит, что данный сервер является шлюзом или прокси-сервером, и он не получает ответа от бэкэнда в пределах допустимого периода времени.

Как правило, это происходит по следующим причинам:

  • Плохое сетевое соединение между серверами;
  • Внутренний сервер, который выполняет запрос, работает слишком медленно;
  • В настройках сервера задано слишком короткое время ожидания шлюза или прокси-сервера.

Заключение

Теперь вы знакомы с основными кодами ошибок HTTP и знаете некоторые пути решения этих проблем.

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

Tags: , , ,

Добавить комментарий