====== Коды ответов HTTP сервера ====== {{ :web:http_status_codes.png?nolink&350|}} * [[https://www.flickr.com/photos/girliemac/sets/72157628409467125|HTTP Status Cats]] * http://httpstatusdogs.com/444-no-response Источник: http://vds-admin.ru/http/kody-sostoyaniya-http-otveta-veb-servera-metody-http **Код состояния HTTP** - это часть строки заголовка, ответа веб сервера на запрос клиента, информирующая о результате запроса и о том, что клиент должен предпринять далее. Думаю не все знают как выглядит заголовок ответа сервера, зато уверен, каждый, пользующийся интернетом, не раз сталкивались, со страницей //404 Not Found// или //403 Forbadden//. Это и есть, видимый пользователю результат, выдачи сервером, того или иного кода статуса в строке заголовке. Коды состояния //HTTP//, разделены на 5 категорий. Клиент может быть не знаком с тем или иным кодом ответа //HTTP//, однако он должен отреагировать согласно категории кода. Итак //протокол HTTP// поддерживает следующие коды статуса, разделенные по категориям: ===== 1xx: Information - информационные ===== ==== 100 Continue - Продолжать. ==== Сервер доволен данными в запросе клиента, можно продолжать передачу заголовков. Появился в протоколе версии HTTP/1.1. ==== 101 Switching Protocols - Переключение протоколов. ==== Сервер предлагает выбрать другой протокол, более соответствующий данному ресурсу. Протоколы предлагаемый сервером, указываются в строке заголовка Update, если предложенный сервером протокол, устраивает клиента, он высылает новый запрос с указанием нового протокола. Появился в протоколе версии HTTP/1.1. ==== 102 Processing - Обрабатывается. ==== Используется в протоколе WebDAV, работающем поверх HTTP протокола. Данный код статуса информирует клиента о том, что запрос принят, но на его обработку может понадобится определенное время, что-бы он ( клиент ), не сбрасывал соединение. Клиент в этом случае должен обнулить таймер и ожидать следующей команды. ===== 2xx: Success - Успешное завершение ===== ==== 200 OK - Хорошо. ==== Запрос к ресурсу выполнен успешно. Данные, запрошенные клиентом, находятся в заголовке и/или в теле ответа. Появился в протоколе версии HTTP/1.0. ==== 201 Created - Создано. ==== Запрос выполнен успешно, новый ресурс создан. В ответе сервера, в заголовке Location, указывается местоположение созданного ресурса. Кроме того, серверу рекомендуется указывать характеристики созданного ресурса, в заголовке ответа. Появился в протоколе версии HTTP/1.0. ==== 202 Accepted - Принято. ==== Запрос принят, но еще в обработке. Появился в протоколе версии HTTP/1.0. ==== 203 Non-Authoritative Information - Информация из неавторитетного источника. ==== Аналогично коду 200, но в данном случае информация может быть неактуальной, так как взята не из первоисточника. Появился в протоколе версии HTTP/1.1. ==== 204 No Content - Отсутствует содержимое. ==== Сервер успешно обработал запрос, но не вернул содержимого. Появился в протоколе версии HTTP/1.0. ==== 205 Reset Content - Сбросить содержимое. ==== Сервер успешно обработал запрос, но не вернул содержимого. В отличии от кода 204, данный код, требует от клиента, сбросить представление документа. Появился в протоколе версии HTTP/1.1. ==== 206 Partial Content - Часть содержимого. ==== Сервер вернул результат запроса клиентом, части содержимого, с помощью заголовка range. Используется для докачки файлов или для многопоточной закачки. Появился в протоколе версии HTTP/1.1. ==== 207 Multi-Status - Многостатусный. ==== Возвращаемое сервером тело сообщения, представляет из себя XML документ со статусами выполнения нескольких подзапросов. Используется в протоколе WebDAV. ==== 226 IM Used - Использовано IM ==== Расширение HTTP для поддержки "дельта кодирования" ( delta encoding ). Заголовок A-IM принят, данные возвращаются согласно установленным параметрам. ===== 3xx: Redirection - Редирект ( перенаправление ) ===== Коды данной категории, сообщают клиенту, что для завершения запроса, ему необходимо выполнить дополнительный запрос, как правило по другому //URI//, соответствующий адрес указывается в строке //Location//, ответа сервера. Программа - клиент может совершать дополнительные запросы без участия пользователя, при условии что дополнительный запрос делается методами //GET// или //HEAD//. Некоторые клиенты некорректно работают с редиректами **301** и **302**, применяя в запросе ко второму ресурсу метод //GET//, несмотря на то, что первый запрос был сделан с использованием другого метода. В протоколе //HTTP версии 1.1//, вместо ответа статуса **302**, были введены дополнительные коды ответов, **303** и **307**. Изменять метод, необходимо только в случает ответа сервера со статусом **303**, в остальных случаях использовать исходный метод. ==== 300 Multiple Choices - Несколько вариантов выбора. ==== По запрошенному //URI//, существует несколько вариантов ресурса, различных по //MIME// типу. языку или другим признакам. В ответе сервера, передается список альтернатив, выбираемый клиентским приложением автоматически или самим пользователем. Появился в протоколе версии //HTTP/1.0//. ==== 301 Moved Permanently - Перемещёно окончательно. ==== Запрошенный ресурс был окончательно перемещен на //URI//, указанный в строке заголовка //Location//, ответа сервера. Некоторые клиенты, при обработке данного кода, ведут себя некорректно, см. выше. Появился в протоколе версии //HTTP/1.0//. ==== 302 Found - Найдено ( Moved Temporarily ) ==== Данный код статуса сообщает клиенту, что ресурс временно доступен по другому //URI//, указанному в строке заголовка //Location//, заголовка ответа сервера. Данный код используется например, при согласовании содержимого ( //Content Negotiation// ), выполняемого сервером. Появился в протоколе версии //HTTP/1.0//. ==== 303 See Other - Смотреть другое. ==== Документ из запрошенного //URI//, нужно запросить по адресу, указанному в строке заголовка //Location//, заголовка ответа сервера, используя метод //GET//, невзирая на то, каким методом был сделан первый запрос. Появился в протоколе версии //HTTP/1.1//. ==== 304 Not Modified - Не изменялось. ==== Данный код выдается в случае запроса документа, методом //GET//, с использованием заголовков //If-Modified-Since// или //If-None-Match//, и документ не был изменен с указанного момента времени. Появился в протоколе версии //HTTP/1.0//. ==== 305 Use Proxy - Использовать прокси сервер. ==== Запрос к ресурсу, должен выполняться через прокси-сервер., адрес которого, указан в строке заголовка //Location//, заголовка ответа сервера. Появился в протоколе версии //HTTP/1.1//. ==== 307 Temporary Redirect - Временное перенаправление ==== Запрошенный ресурс временно доступен по //URI//, указанному в строке заголовка //Location//, заголовка ответа сервера. Появился в протоколе версии //HTTP/1.1//. ===== 4xx: Client Error - Ошибка клиента ===== Коды данной категории служат для указание на ошибку со стороны клиента. При использовании любых методов запроса, кроме //HEAD//, сервера возвращает пользователю гипертекстовое пояснение по данной ошибке. ==== 400 Bad Request - Плохой запрос. ==== Из-за синтаксической ошибки, запрос не был понят сервером. Появился в протоколе версии //HTTP/1.0//. ==== 401 Unauthorized - Не авторизован. ==== Ресурс требует идентификации пользователя. Клиентское приложение запрашивает у пользователя данные для аутентификации ( имя, пароль ) и передает их на сервер в заголовке //WWW-Authenticate//. Если данные указаны не правильно, будет снова выдан этот-же код статуса. Появился в протоколе версии //HTTP/1.0//. ==== 402 Payment Required - Необходима оплата. ==== Пока не используется. Появился в протоколе версии //HTTP/1.1//. ==== 403 Forbidden - Запрещено. ==== Сервер отказал в доступе к запрошенному ресурсу ввиду ограничений. Ограничения могут быть любыми, установленными администратором сервера, или определенным веб приложением. Например, в целях безопасности, закрыт доступ к файлу, //.htacces// или //.htpasswd// или к закрытой директории сайта, или в случае, когда аутентификация должна производится через веб приложение ( например сайтовый движок ), ну или блокировка по IP адресу, в случае слишком частых обращений. Появился в протоколе версии //HTTP/1.0//. ==== 404 Not Found - Не найдено. ==== Сервер не нашел запрошенный ресурс по указанному адресу. Кроме того данный код ответа можно использовать вместо 403, с целью, скрыть расположение документа, доступ к которому запрещен. Появился в протоколе версии //HTTP/1.0//. ==== 405 Method Not Allowed - Метод не поддерживается. ==== Клиент попытался использовать метод, недопустимый для данного ресурса. Сервер передает в заголовке, строку //Allow//, содержащую список допустимых методов. Появился в протоколе версии //HTTP/1.1//. ==== 406 Not Acceptable - Не приемлемо. ==== Запрошенный ресурс, не удовлетворяет, запрошенные характеристики. В случае, если запрос был сделан не методом //HEAD//, сервер вернет список допустимых характеристик запрошенного ресурса. Появился в протоколе версии //HTTP/1.1//. ==== 407 Proxy Authentication Required - Необходима прокси авторизация. ==== Данный код статуса, аналогичен коду 401 за исключением того, что аутентификация производится для прокси-сервера. Появился в протоколе версии //HTTP/1.1//. ==== 408 Request Timeout - Время ожидания истекло. ==== Истек таймаут ожидания передачи данных, между сервером и клиентом. Появился в протоколе версии //HTTP/1.1//. ==== 409 Conflict - Конфликт. ==== Конфликтная ситуация при обращении к ресурсу. Такое может произойти, например, при попытке одновременного изменения файла, методом //PUT//, несколькими клиентами. Появился в протоколе версии //HTTP/1.1//. ==== 410 Gone - Удалён. ==== Данный ответ выдается в случае, если документ был по указанному //URI//, но в данный момент удален. Появился в протоколе версии //HTTP/1.1//. ==== 411 Length Required - Необходима длина. ==== Этот код статуса говорит о том, что для данного //URI//, в заголовке запроса, должно быть указано значение в поле //Content-Length//. Появился в протоколе версии //HTTP/1.1//. ==== 412 Precondition Failed - Условие «ложно. ==== Данный код выдается в случае, если ни одно из условных полей заголовка не было удовлетворено. Появился в протоколе версии //HTTP/1.1//. ==== 413 Request Entity Too Large - Запрошены слишком большие данные. ==== Данный код выдается, если сервер по каким-либо причинам, не может передать, требуемый объем данных. Если это временная проблема, сервер может указать время, по истечении которого можно будет попробовать повторно запросить ресурс, в строке заголовка, //Retry-After//. Появился в протоколе версии //HTTP/1.1//. ==== 414 Request-URI Too Long - Запрашиваемый URI слишком длинный. ==== Слишком длинная строка запроса. Такая ситуация может произойти, например в случае попытки, передать данные методом //GET//, вместо использования //POST//. Появился в протоколе версии //HTTP/1.1//. ==== 415 Unsupported Media Type - Неподдерживаемый тип данных. ==== Сервер, по какой-то причине, отказался обрабатывать запрошенные данные, используемым методом. Появился в протоколе версии //HTTP/1.1//. ==== 416 Requested Range Not Satisfiable - Запрашиваемый диапазон не достижим. ==== В строке заголовка запроса Range, установлен диапазон, выходящий за рамки запрошенного ресурса и отсутствует строка //If-Range//. Появился в протоколе версии //HTTP/1.1//. ==== 417 Expectation Failed - Ожидаемое не приемлемо. ==== Сервер не может обработать строку заголовка запроса //Expect//. Появился в протоколе версии //HTTP/1.1//. ==== 422 Unprocessable Entity - Необрабатываемый экземпляр. ==== Запрос принят, тип данных может быть обработан, синтаксис //XML// данных в теле запроса верен, но имеет место логическая ошибка, не позволяющая обработать запрос к ресурсу. Используется в протоколе //WebDAV//. ==== 423 Locked - Заблокировано. ==== Запрошенный ресурс заблокирован от данного метода. Используется в протоколе //WebDAV//. ==== 424 Failed Dependency - Невыполненная зависимость. ==== Выполнение запроса, может зависеть от результата выполнения, какой-либо другой операции, при невыполнении данного условия, будет выдан этот код статуса. Используется в протоколе //WebDAV//. ==== 425 Unordered Collection - Беспорядочный набор. ==== Этот код статуса будет выдан в случае, если клиент отправил запрос обозначив положение в неотсортированной коллекции или используя порядок следования элементов отличный от серверного. Введено в черновике по //WebDAV Advanced Collections Protocol//. ==== 426 Upgrade Required - Требуется обновление. ==== Указание сервера, клиенту, обновить протокол. Заголовок ответа, должен содержать правильно составленные поля //Upgrade// и //Connection//. Введено в //RFC 2817// для возможности перехода к //TLS// посредством //HTTP//. ==== 449 Retry With - Повторить с... ==== Выдается в случае поступления не достаточного количества информации для обработки запроса. В заголовок ответа сервера, помещается строка //Ms-Echo-Request//. Введено корпорацией Microsoft для //WebDAV//. ===== 5xx: Server Error - Ошибка на стороне сервера ===== Коды данной категории, предназначены для ситуаций, когда обработка запроса не возможна по вине сервера. Во всех случаях, кроме использования метода //HEAD//, сервер должен включать в тело ответа, объяснение для пользователя. ==== 500 Internal Server Error - Внутренняя ошибка сервера. ==== Любая внутренняя ошибка на стороне сервера не подпадающая под остальные ошибки из категории 5хх. Появился в протоколе версии HTTP/1.0. ==== 501 Not Implemented - Не реализовано. ==== Сервер не поддерживает, необходимых для обработки запроса, возможностей. ( например не поддерживается необходимый метод обработки ). Появился в протоколе версии HTTP/1.0. ==== 502 Bad Gateway - Плохой шлюз. ==== Сервер, работающий в качестве прокси или шлюза, получил сообщение о неудачное в промежуточной операции. Появился в протоколе версии HTTP/1.0. ==== 503 Service Unavailable - Сервис недоступен. ==== Сервер не в состоянии обрабатывать запросы клиентов по техническим причинам. Появился в протоколе версии HTTP/1.0. ==== 504 Gateway Timeout - Истек таймаут ожидания ответа шлюза. ==== Проксирующий сервер или шлюз, не дождался ответа от вышестоящего сервера для завершения обработки запроса. Появился в протоколе версии HTTP/1.0. ==== 505 HTTP Version Not Supported - Версия HTTP протокола не поддерживается. ==== Сервер не поддерживает, или не может обработать, указанную в заголовке версию HTTP протокола. Появился в протоколе версии HTTP/1.0. ==== 506 Variant Also Negotiates - Вариант тоже согласован. ==== Из-за не верной конфигурации, выбранный вариант указывает сам на себя, в следствии чего, связывание прерывается. Добавлено в RFC 2295 для дополнения протокола HTTP технологией Transparent Content Negotiation. ==== 507 Insufficient Storage - Переполнение хранилища. ==== Недостаточно места для обработки текущего запроса. Возможно временная проблема. Используется в протоколе WebDAV. ==== 509 Bandwidth Limit Exceeded - Пропускная возможность канала исчерпана. ==== Данный код статуса, используется в случае превышения веб площадкой, отведенного ей лимита, на потребляемый трафик. Данный код не описан ни одним RFC и используется только модулем bw/limited, панели веб-хостинга cPanel. ==== 510 Not Extended - Нет расширения. ==== У сервера отсутствует расширение, которое пытается использовать клиентом. Сервер может передавать информацию, об имеющихся у него расширениях. Введено в RFC 2774 для дополнения протокола HTTP поддержкой расширений. ===== Методы обработки запросов HTTP ===== **HTTP метод** - это основная операция, которую необходимо выполнить над ресурсом. В названии могут использоваться любые символы, кроме управляющих последовательностей и разделителей, как правило это короткое слово на английском языке. Имена методов HTTP зависимы от регистра. Любой веб сервер обязан работать, по крайней мере с двумя методами GET и HEAD. Если сервер не смог определить метод, указанный в заголовке запроса клиента, он должен вернуть код статуса 501 (Not Implemented), если-же метод серверу известен, но неприменим к данному ресурсу, будет возвращен код статуса 405 (Method Not Allowed). Как в первом, так и во втором случае, сервер должен включить в свой ответ, заголовок Allow со списком методов, которые он поддерживает.