Код состояния HTTP — это трехзначный код ответа на HTTP-запрос. Он предназначен для использования автоматами, поясняющая фраза после него предназначена для пользователей.
Классы ответа
Первая цифра кода состояния определяет класс ответа:
1xx: Информационные коды — запрос получен, продолжается обработка.
2xx: Успешные коды — запрос был успешно получен, понят и выполнен.
3xx: Коды перенаправления — для выполнения запроса должны быть предприняты дальнейшие действия агента пользователя (программы, принимающей ответ на запрос).
4xx: Коды ошибок клиента — запрос имеет плохой синтаксис или не может быть выполнен. Также указывает, является ли ситуация временной или постоянной.
5xx: Коды ошибок сервера — сервер не в состоянии выполнить допустимый запрос или выполнил его с ошибкой.
Просмотр кода ответа протокола HTTP
Один из самых простых способов увидеть коды ответа — зайти в инструменты разработчика в браузере. Например, для браузеров google chrome и mozilla firefox достаточно:
- Зайти на нужный сайт.
- Нажать на кнопку F12 на клавиатуре, в открывшихся инструментах перейти на вкладку «Network».
- Обновить страницу.
На скриншоте показаны инструменты разработчика google chrome, коды ответа есть в колонке Status.
Наиболее распространённые коды ответов протокола HTTP
200 OK - запрос был выполнен успешно.
403 Forbidden (Запрещено) - сервер понял запрос, но отказывается выполнять его. Установление подлинности (Authorization) не поможет, и запрос не должен быть повторен. Ошибка 403 может возникать, когда доступ к ресурсу запрещён с определённого IP-адреса или всех адресов, либо в папке сайта отсутствует индексный файл.
404 Not Found (Не найден) - сервер не нашел ничего, соответствующего данному запрашиваемому URI (Universal Resource Identifier). Страница может быть не найдена вследствие некорректных настроек файла .htaccess или в случае фактического отсутствия искомой страницы на сайте.
500 Internal Server Error (Внутренняя ошибка сервера) - сервер столкнулся с непредвиденным условием, которое не позволяет ему выполнить запрос. Ошибка 500 является следствием невозможности запуска скрипта, а также возникает в случае синтаксических или иных ошибок в скрипте или присутствия некорректных записей в файле .htaccess.
502 Bad Gateway (Ошибка шлюза) - сервер, действуя в качестве шлюза или прокси-сервера, получил недопустимый ответ от следующего сервера в цепочке запросов, к которому обратился при попытке выполнить запрос. В случае, если используется связка apache+nginx, проксирующим сервером является nginx. Данная ошибка может появиться в случае, если работающий процесс пытается потребить больше ресурсов, чем доступно в рамках услуги виртуального хостинга, в этом случае ему посылается сигнал завершения и возвращается результат запроса 502.
503 Service Unavailable (Сервис недоступен) - сервер в настоящее время не способен обработать запрос из-за временной перегрузки или обслуживания сервера. Причина возникновения 503 Service Unavailable как правило, кроется в превышении лимита на количество одновременно запущенных процессов на аккаунте. На тарифах виртуального хостинга, согласно п. 2.12 Договора оферты, данный лимит составляет 64 процесса.
504 Gateway Timeout (Истекло время ожидания от шлюза) - сервер, действуя в качестве шлюза или прокси-сервера, не получил своевременного ответа от следующего сервера в цепочке запросов, к которому обратился при попытке выполнить запрос. В связке apache+nginx nginx выполняет роль прокси-сервера, и в случае, если он не дожидается ответа от apache, он отдаёт код 504. Также 504 Bad Gateway возникает, если исполняемый скрипт не может отработать в установленный лимит времени. Это возможно решить увеличением параметра max_execution_time или оптимизировать скрипт, при работе которого возникает ошибка.
Список прочих кодов ответов протокола HTTP
100 Continue (Продолжать) - клиент может продолжать запрос, а если запрос отправлен, то игнорировать отклик. Сервер должен послать окончательный отклик по завершении реализации запроса.
101 Switching Protocols (Переключение протоколов) - сервер принял и понял запрос клиента на переключение на модифицированный протокол. Сервер переходит на протокол, определенный в поле заголовка отклика Upgrade, немедленно после получения пустой строки, завершающей отклик 101.
201 Created (создан) - запрос был выполнен и в результате был создан новый ресурс.
202 Accepted (Принято) - запрос был принят для обработки, но обработка не была завершена. В конечном счете запрос может быть, а может и не быть выполнен, поскольку он может быть отвергнут при фактической обработке.
203 Non-Authoritative Information (Ненадёжная информация) - присылаемая в ответ метаинформация в заголовке объекта не идентифицируется, как полученная от исходного сервера, её следует скорее считать косвенной, полученной опосредованно.
204 No Content (нет содержимого) - сервер выполнил запрос, но нет никакой новой информации, которую можно послать обратно.
205 Reset Content (сбросить содержимое) - Сервер исполнил запрос и агент пользователя должен вернуть документ к виду, который он имел в момент посылки запроса. Этот отклик первоначально предназначался для обеспечения ввода при выполнении пользователем операции, за которой следует очистка формы, в которую произведен ввод, так что пользователь может начать другую операцию ввода.
206 Partial Content (Частичное содержимое) - сервер выполнил частичный GET запрос ресурса.
300 Multiple Choices (Множественный выбор) - запрошенный ресурс имеет несколько представлений, и можно использовать любое из перечисленных.Агент пользователя выбирает предпочтительное представление и перенаправляет запрос ему.
301 Moved Permanently (Постоянно перенесен) - запрошенному ресурсу был назначен новый постоянный URI, и любые будущие ссылки на этот ресурс следует выполнять, используя один из возвращенных URI.
302 Moved Temporarily (Временно перемещен) - запрошенный ресурс временно находится под другим URI.
303 See Other (Смотреть другой) - ответ на запрос может быть найден под другим URI и его следует запрашивать, используя метод GET для этого ресурса.
304 Not Modified (Не модифицирован) - если клиент выполнил условный GET запрос, и доступ разрешен, но документ не изменился, то серверу следует ответить, используя этот код состояния.
305 Use Proxy (Используйте прокси-сервер) - обращение к запрошенному ресурсу должно производиться через прокси-сервер, указанный в поле Location. В поле Location указан URL прокси-сервера.
400 Bad Request (Испорченный Запрос) - запрос не может быть понят сервером из-за ошибки синтаксиса.
401 Unauthorized (Несанкционированно) - запрос требует установления подлинности пользователя.
402 Payment Required (Требуется оплата) - этот код зарезервирован для будущего использования.
405 Method Not Allowed (Метод не дозволен)- метод, определенный в строке запроса (Request-Line) не дозволено применять для ресурса, идентифицированного запрашиваемым URI (Request-URI).
406 Not Acceptable (Не приемлем) - ресурс, определенный запросом, может генерировать только ответ, характеристики которого не соответствуют заголовкам, посланным в запросе.
407 Proxy Authentication Required (Требуется установление подлинности через прокси-сервер) - этот код подобен коду 401, но указывает, что клиент должен сначала установить свою подлинность (authenticate) прокси-серверу.
408 Request Timeout (Истекло время ожидания запроса) - клиент не произвел запрос в течение времени, которое сервер готов ждать.
409 Conflict (Конфликт) - запрос не был выполнен из-за конфликта с текущим состоянием ресурса, конфликты, наиболее вероятно, будут возникать в ответ на запрос PUT.
410 Gone (Удален)- запрошенный ресурс больше не доступен на сервере, и нет никакого адреса для перенаправления запроса.
411 Length Required (Требуется длина) - cервер отказывается принимать запрос с неопределенным Content-Length.
412 Precondition Failed (Предусловие неверно) - предусловие, представленное одним или несколькими полями заголовка запроса (request-header), оказалось ложным при проверке сервером.
413 Request Entity Too Large (Объект запроса слишком большой) - сервер отказывается обрабатывать запрос, потому что объект запроса больше, чем сервер желает или способен обработать.
414 Request-URI Too Long (URI запроса слишком длинный) - сервер отказывается обслуживать запрос, потому что запрашиваемый URI (Request-URI) длиннее, чем сервер желает интерпретировать.
415 Unsupported Media Type (Неподдерживаемый медиа тип) - сервер отказывается обслуживать запрос, потому что объект запроса находится в формате, не поддерживаемом запрошенным ресурсом для запрошенного метода. В случае нашего хостинга, такой ответ может давать срабатывание модуля безопасности ModSecurity
501 Not Implemented (Не реализовано) - сервер не поддерживает функциональные возможности, требуемые для выполнения запроса.
505 HTTP Version Not Supported (Не поддерживаемая версия HTTP) - сервер не поддерживает, или отказывается поддерживать, версию HTTP протокола, которая используется в сообщении запроса.