Учебники

HTTP — Ответы

После получения и интерпретации сообщения запроса сервер отвечает сообщением HTTP-ответа:

  • A Status-line
  • Zero or more header (General|Response|Entity) fields followed by CRLF
  • An empty line (i.e., a line with nothing preceding the CRLF) indicating the end of the header fields
  • Optionally a message-body

В следующих разделах объясняется каждая из сущностей, используемых в ответном сообщении HTTP.

Сообщение Status-Line

Строка состояния состоит из версии протокола, за которой следует числовой код состояния и связанная с ним текстовая фраза. Элементы разделяются пробелами SP.

Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF

Версия HTTP

Сервер, поддерживающий HTTP версии 1.1, вернет следующую информацию о версии:

HTTP-Version = HTTP/1.1

Код состояния

Элемент Status-Code представляет собой трехзначное целое число, где первая цифра Status-Code определяет класс ответа, а последние две цифры не имеют никакой роли категоризации. Для первой цифры есть 5 значений:

SN Код и описание
1 1xx: информационный

Это означает, что запрос был получен, и процесс продолжается.

2 2xx: успех

Это означает, что действие было успешно получено, понято и принято.

3 3xx: перенаправление

Это означает, что для выполнения запроса необходимо предпринять дальнейшие действия.

4 4xx: ошибка клиента

Это означает, что запрос содержит неверный синтаксис или не может быть выполнен.

5 5xx: ошибка сервера

Это означает, что серверу не удалось выполнить явно допустимый запрос.

Это означает, что запрос был получен, и процесс продолжается.

Это означает, что действие было успешно получено, понято и принято.

Это означает, что для выполнения запроса необходимо предпринять дальнейшие действия.

Это означает, что запрос содержит неверный синтаксис или не может быть выполнен.

Это означает, что серверу не удалось выполнить явно допустимый запрос.

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

Поля заголовка ответа

Мы изучим General-header и Entity-header в отдельной главе, когда будем изучать поля HTTP-заголовка. А пока давайте проверим, что такое поля заголовка ответа.

Поля заголовка ответа позволяют серверу передавать дополнительную информацию об ответе, которую нельзя поместить в строку состояния. Эти поля заголовка дают информацию о сервере и о дальнейшем доступе к ресурсу, идентифицированному Request-URI.

  • Accept-Ranges

  • Возраст

  • ETag

  • Место нахождения

  • Proxy-Authenticate

  • Retry-After

  • сервер

  • изменяться

  • WWW-Authenticate

Accept-Ranges

Возраст

ETag

Место нахождения

Proxy-Authenticate

Retry-After

сервер

изменяться

WWW-Authenticate

Вы можете ввести свои собственные поля на случай, если вы собираетесь написать свой собственный веб-клиент и сервер.

Примеры ответного сообщения

Теперь давайте соберем все вместе, чтобы сформировать HTTP-ответ на запрос на получение страницы hello.htm с веб-сервера, работающего на tutorialspoint.com.

HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
Content-Length: 88
Content-Type: text/html
Connection: Closed
<html>
<body>
<h1>Hello, World!</h1>
</body>
</html>

В следующем примере показано ответное сообщение HTTP, отображающее состояние ошибки, когда веб-сервер не может найти запрошенную страницу:

HTTP/1.1 404 Not Found
Date: Sun, 18 Oct 2012 10:36:20 GMT
Server: Apache/2.2.14 (Win32)
Content-Length: 230
Connection: Closed
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head>
   <title>404 Not Found</title>
</head>
<body>
   <h1>Not Found</h1>
   <p>The requested URL /t.html was not found on this server.</p>
</body>
</html>

Ниже приведен пример сообщения ответа HTTP, показывающего состояние ошибки, когда веб-сервер обнаружил неправильную версию HTTP в данном запросе HTTP: