Каждый раз, при обращении к веб серверу, в ответ вы получаете код статуса ответа. Эти коды делятся на пять основных групп, а каждый код имеет трехзначное значение. Группу кода легко определить по первой цифре:
- 1хх — информационный
- 2хх — удачное завершение
- 3хх — перенаправление
- 4хх — ошибка на стороне клиента
- 5хх — ошибка на стороне сервера
Существует огромное множество возможных ошибок, но мы опишем только самые основные.
Обзор клиентских и серверных ошибок
Клиентские ошибки (400-499) — результат некорректного запроса со стороны клиента. Несмотря на то, что эти ошибки возникают со стороны клиента, следует уделять им достаточное внимания и рассмотреть все возможные варианты их устранения на стороне сервера.
Сервеные ошибки (500-599) возникают в результате работы сервера, если он не в состоянии обработать запрос пользователя и сталкивается с какими-либо внутренними проблемами.
Заметки по устранению основных проблем
- Проверяйте серверные логи, из которых вы получите более детальную информацию о возникшей проблеме. Например, такие сервера как Apache и Nginx записывают логи в файлы
access.log
иerror.log
, которые вы можете просмотреть. - Держите в голове тот факт, что коды ответа HTTP это стандарт, который должен быть соблюден в приложении, обрабатывающем запрос. То есть, полученный код зависит от самого приложения.
После того как мы поверхностно описали основные ошибки, рассмотрим их более детально.
400 некорректный запрос
Такой код означает, что запрос к серверу был сформулирован неправильно, возможно использовался некорректный синтаксис.
Приведем несколько возможных причин возникновения такой ошибки:
- Куки пользователя, от которых зависит работа сайта, испорчены. Обычна очистка кеша и куки помогает решить проблему.
- Некорректный запрос по вине самого пользователя, когда, например, запрос был сформирован при помощи
curl
.
401 доступ запрещен
Этот код возникает в том случае, если пользователь пытается получить доступ к закрытому ресурсу без авторизации, либо если он не полностью авторизовался. То есть пользователь должен ввести свой логин и пароль чтобы получить доступ к защищенному ресурсу.
Примером может служит ситуация, когда пользователь пытается получить какой-то ресурс, который защищен при помощи HTTP аутентификации. В таком случае пользователь получит доступ к ресурсу только после того, как введет корректные логин и пароль, которые указаны в файле .htpasswd
.
403 отказ в доступе
Этот код означает, что пользователь создал верный запрос, но сервер отказал в выдаче ответа, из-за ограничений прав. Если вы столкнулись с таким кодом, то первым делом стоит рассмотреть следующие причины:
- Права на файлы
403 код часто возникает в случае, когда пользователь, под которым запущен веб сервер, не имеет достаточных прав на файл, к которому обращается клиент.
Рассмотрим следующие ситуации:
- Пользователь обратился к индекс файлу сервера http://example.com/index.html
- Сервер запущен под пользователем
www-data
- На сервере этот файл расположен по адресу
/usr/share/nginx/html/index.html
Убедитесь в том, что пользователю www-data
открыт доступ к чтению этого файла. Чаще всего это означает, что “доступ для остальных пользователей” должен быть открыт для чтения. Конечно, существует целый ряд устранения проблемы, но следующая команда вам точно поможет:
sudo chmod o=r /usr/share/nginx/html/index.html
Следующая причина возникновения ошибки 403, как правило созданная специально, это файл .htaccess
. В нем можно задать правила доступа к ресурсам, например для определнного диапазона IP адресов.
Просмотрите внимательно этот файл, если вы сталкиваетесь с это пролемой.
Индексный файл не существует
Если пользователь обратился к каталогу, в котором не существует индексный файл, а просмотр содержимого каталога запрещен, то он получит в ответ код 403. Например, пользователь обратился к http://example.com/emptydir/ , в этой директории отсутствует индексный файл, в таком случае сервер вернет код 403.
Если вы хотите разрешить просмотр содержимого каталога, то это можно сделать в настройках сервера.
404 не найдено
Ошибка означает, что пользователь корректно обратился к серверу, но сам сервер не смог найти запрашиваемый ресурс.
Код 404 может возникать в целом ряде ситуаций. Если вы столкнулись с подобной проблемой, то первым делом взгляните на следующие причины:
- Правильно ли введен URL?
- Присутствует ли файл на сервере? Возможно он был удален или перемещен?
- Правильно ли указан корневой каталог сервера в настройках?
- Имеет ли пользователь, под которым работает сервер, корректные права для чтения файла? Как правильно необходимо иметь права не только на чтение, но и на исполнение.
- Используется ли символическая ссылка для обработки запроса? Если так, то правильно ли настроен ваш сервер для работы с ними?
500 внутрення ошибка сервера
Ошибка означает, что запрос не может быть обработан сервером, по неизвестной внутренней причине.
Самая частая причина — неправильная настройка сервера (некорректный .htaccess
) или обращение к неустановленному пакету PHP.
502 ошибочный шлюз
Такая ошибка означает, что сервер является либо шлюзом, либо прокси сервером, который не получает ответ от бекэнд серверов, ответственных за обработку запроса.
Если сервер выполняет роль обратного прокси сервера, например является балансировщиком нагрузки, то убедитесь в том, что:
- Бекэнд сервера (отвечающие за обработку запроса) исправны
- Прокси правильно настроен, все бекэнд сервера корректно указаны
- Сетевое соединение между задействованными серверами рабочее. Если сервера работают при использовании различных портов, проверьте, что файрвол не блокирует эти соединения.
503 служба недоступна
Такой код говорит о том, что сервер или перегружен или находится на обслуживании. Как правило, это означает, что в скором времени сервер станет доступен.
Если сервер в этот момент не на обслуживании, то, как правило, это говорит о том, что серверу недостаточно CPU ресурсов или памяти для обработки запроса. Возможно на вашем сервере стоит ограничение на одновременное количество пользователей.
504 таймаут шлюза
Ошибка возникает в случает, если ваш сервер выполняет роль шлюза или обратного прокси, и он не получает ответ от бекэнд сервера в указанный промежуток времени.
Возможные причины:
- Плохое сетевое соединение
- Бекэнд сервер слишком медленно обрабатывает запрос ил-за недостатка ресурсов
- Таймаут сервера слишком короткий
Заключение
Теперь вы должны довольно легко ориентироваться в кодах, возвращаемых веб сервером и быстро находить причину возникновения ошибки.
Если вы хотите поделиться своим опытом в устранении HTTP ошибок, то оставляйте свои комментарии.