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 представляет собой трехзначное целое число, где первая цифра Code-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

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

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

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

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:

HTTP/1.1 400 Bad Request
Date: Sun, 18 Oct 2012 10:36:20 GMT
Server: Apache /2.2.14 (Win32)
Content-Length: 230
Content-Type: text/html; charset=iso-8859-1
Connection: Closed
  
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head>
   <title>400 Bad Request</title>
</head>
<body>
   <h1>Bad Request</h1>
   <p>Your browser sent a request that this server could not understand.</p>
   <p>The request line contained invalid characters following the protocol string.</p>
</body>
</html>