HTTP
HTTP-ответы
Поиск…
параметры
Код состояния | Причина-фраза - Описание |
---|---|
100 | Продолжить - клиент должен отправить следующую часть запроса с несколькими частями. |
101 | Переключение протоколов - сервер меняет версию или тип протокола, используемые в этом сообщении. |
200 | OK - сервер получил и выполнил запрос клиента. |
201 | Создано - сервер принял запрос и создал новый ресурс, доступный под URI в заголовке Location . |
202 | Принято - сервер получил и принял запрос клиента, но он еще не начал или не завершил обработку. |
203 | Неавторитная информация - сервер возвращает данные, которые могут быть поднабором или надмножеством информации, доступной на исходном сервере. В основном используется прокси. |
204 | Нет содержимого - используется вместо 200 (ОК), когда тела нет ответа. |
205 | Сбросить содержимое - идентично 204 (без содержимого), но клиент должен перезагрузить активный вид документа. |
206 | Частичное содержимое - используется вместо 200 (ОК), когда клиент запросил заголовок Range . |
300 | Несколько вариантов - запрашиваемый ресурс доступен в нескольких URI, и клиент должен перенаправить запрос на URI, указанный в списке в теле сообщения. |
301 | Перемещено на постоянной основе - запрошенный ресурс больше не доступен в этом URI, и клиент должен перенаправить этот и все будущие запросы в URI, указанный в заголовке Location . |
302 | Найдено - ресурс временно находится под другим URI. Этот запрос должен быть перенаправлен на подтверждение пользователя в URI в заголовке Location , но будущие запросы не должны быть изменены. |
303 | См. Прочее - очень похоже на 302 (Найдено), но не требует ввода пользователем для перенаправления на предоставленный URI. Предоставленный URI должен быть получен с помощью запроса GET. |
304 | Не изменено - клиент отправил If-Modified-Since или аналогичный заголовок, и ресурс не был изменен с этой точки; клиент должен отображать кешированную копию ресурса. |
305 | Использовать прокси - запрошенный ресурс необходимо запросить снова через прокси-сервер, указанный в поле заголовка « Location . |
307 | Временное перенаправление - идентично 302 (найдено), но клиенты HTTP 1.0 не поддерживают 307 ответов. |
400 | Плохой запрос - клиент отправил неверный запрос, содержащий синтаксические ошибки, и должен изменить запрос, чтобы исправить это, прежде чем повторять его. |
401 | Неавторизованный - запрошенный ресурс недоступен без аутентификации. Клиент может повторить запрос, используя заголовок Authorization чтобы предоставить данные аутентификации. |
402 | Обязательный платеж - зарезервированный, неуказанный код состояния для использования приложениями, для которых требуется подписка на пользователя для просмотра содержимого. |
403 | Запрещено - сервер понимает запрос, но отказывается выполнять его из-за существующих средств контроля доступа. Запрос не следует повторять. |
404 | Не найдено. На этом сервере нет ресурса, который соответствует запрошенному URI. Может использоваться вместо 403, чтобы не подвергать деталям контроля доступа. |
405 | Метод не разрешен - ресурс не поддерживает метод запроса (HTTP-глагол); В заголовке « Allow перечислены приемлемые методы запроса. |
406 | Не приемлемо - ресурс имеет характеристики, которые нарушают принимаемые заголовки, отправленные в запросе. |
407 | Требуется прокси-аутентификация - аналогично 401 (неавторизованный), но указывает, что клиент должен сначала пройти аутентификацию с промежуточным прокси. |
408 | Тайм-аут запроса - сервер ожидал другого запроса от клиента, но ни один из них не был предоставлен в течение приемлемого таймфрейма. |
409 | Конфликт - запрос не может быть завершен, поскольку он противоречит текущему состоянию ресурса. |
410 | Gone - аналогично 404 (Not Found), но указывает на постоянное удаление. Отсутствует адрес пересылки. |
411 | Требуемая длина - клиент не указал допустимый заголовок Content-Length и должен сделать это до того, как сервер примет этот запрос. |
412 | Precondition Failed - ресурс недоступен со всеми условиями, указанными условными заголовками, отправленными клиентом. |
413 | Request Entity Too Large - сервер в настоящее время не может обработать тело сообщения той длины, которую отправил клиент. |
414 | Request-URI Too Long - сервер отказывается от запроса, потому что Request-URI длиннее, чем сервер готов интерпретировать. |
415 | Неподдерживаемый тип носителя - сервер не поддерживает MIME или тип носителя, указанный клиентом, и не может обслуживать этот запрос. |
416 | Запрошенный диапазон не удовлетворен - клиент запросил диапазон байтов, но сервер не может предоставить контент этой спецификации. |
417 | Expectation Failed - клиент указал ограничения в заголовке Expect которые сервер не может выполнить. |
500 | Внутренняя ошибка сервера - сервер встретил неожиданное условие или ошибку, которая мешает ему выполнить этот запрос. |
501 | Не реализовано - сервер не поддерживает функции, необходимые для завершения запроса. Обычно используется для указания метода запроса, который не поддерживается на каком-либо ресурсе. |
502 | Bad Gateway - сервер является прокси-сервером и получил неверный ответ от восходящего сервера при обработке этого запроса. |
503 | Сервис недоступен - сервер находится под большой нагрузкой или проходит техническое обслуживание, и в настоящее время он не может выполнять этот запрос. |
504 | Gateway Timeout - сервер является прокси-сервером и не получил ответ от восходящего сервера своевременно. |
505 | Версия HTTP не поддерживается. Сервер не поддерживает версию HTTP-протокола, с которой клиент выполнил свой запрос. |
Основной формат ответа
Когда HTTP-сервер получает правильно сформированный HTTP-запрос , он должен обработать информацию, содержащую запрос, и вернуть ответ клиенту. Простой ответ HTTP 1.1 может выглядеть как любое из следующего, обычно за которым следуют несколько полей заголовка и, возможно, тело ответа:
HTTP/1.1 200 OK \r\n
HTTP/1.1 404 Not Found \r\n
HTTP/1.1 503 Service Unavailable \r\n
Простой ответ HTTP 1.1 имеет такой формат:
HTTP-Version Status-Code Reason-Phrase CRLF
Как и в запросе, HTTP-Version
указывает версию используемого протокола HTTP; для HTTP 1.1 это всегда должно быть строка HTTP/1.1
.
Status-Code
- это трехзначный код, который указывает статус запроса клиента. Первая цифра этого кода - это класс статуса , который помещает код состояния в одну из 5 категорий ответа [1] :
-
1xx
Информационный - сервер получил запрос и обработка продолжается -
2xx
Success - сервер принял и обработал запрос -
3xx
Redirection - требуется дальнейшие действия со стороны клиента для завершения запроса - Ошибки клиента
4xx
- клиент отправил запрос, который был искажен или не может быть выполнен - Ошибки сервера
5xx
- запрос был действительным, но сервер не может выполнить его в настоящее время
Reason-Phrase
- это краткое описание кода состояния. Например, код 200
имеет причину фразы OK
; код 404
имеет фразу « Not Found
. Полный список фраз причины доступен в параметрах, ниже или в спецификации HTTP .
Линия заканчивается парой обратной линии возврата каретки, обычно представленной \r\n
.
Дополнительные заголовки
Подобно HTTP-запросу, HTTP-ответ может включать в себя дополнительные заголовки для изменения или увеличения ответа, который он предоставляет.
Полный список доступных заголовков определен в разделе 6.2 спецификации . Наиболее часто используемые заголовки:
-
Server
, который функционирует как заголовок запросаUser-Agent
для сервера; -
Location
, которое используется для ответов статуса 201 и 3xx, чтобы указать URI для перенаправления; а также -
ETag
, который является уникальным идентификатором для этой версии возвращаемого ресурса, чтобы клиенты могли кэшировать ответ.
Заголовки ответов поступают после строки состояния, и поскольку заголовки запросов формируются как таковые:
Name: Value CRLF
Name
содержит имя заголовка, например ETag
или Location
, а Value
- значение, заданное сервером для этого заголовка. Линия заканчивается CRLF.
Ответ с заголовками может выглядеть так:
HTTP/1.1 201 Created \r\n
Server: WEBrick/1.3.1 \r\n
Location: http://example.com/files/129742 \r\n
Органы сообщения
Как и в структурах запросов , HTTP-ответы могут содержать тело сообщения. Это предоставляет дополнительные данные, которые клиент будет обрабатывать. Примечательно, что ответы 200 OK на хорошо сформированный запрос GET должны всегда предоставлять тело сообщения, содержащее запрошенные данные. (Если их нет, 204 No Content - более подходящий ответ).
Тело сообщения включено после всех заголовков и двойной CRLF. Что касается запросов, то его длина в байтах должна быть задана заголовком Content-Length
. Следовательно, успешный ответ на запрос GET может выглядеть так:
HTTP/1.1 200 OK\r\n
Server: WEBrick/1.3.1\r\n
Content-Length: 39\r\n
ETag: 4f7e2ed02b836f60716a7a3227e2b5bda7ee12c53be282a5459d7851c2b4fdfd\r\n
\r\n
Nobody expects the Spanish Inquisition.