Руководство по HTTP. Сообщения.

Как уже упоминалось в предыдущей статье, HTTP основан на “клиент-серверной” архитектуре и построен на основе обмена сообщениями с помощью TCP/IP соединения.

При работе с HTTP “Клиент” – это программа (например, веб-браузер), который устанавливает соединение с сервером для отправки одного или нескольких HTTP запросов.

HTTP “Сервер” – это программа (чаще всего, веб-сервер, например Apache), который принимает соединение для обработки запроса путём отправки HTTP ответа.

HTTP использует URL для определения необходимого ресурса и устанавливает соединение. После того как соединение было установлено, HTTP сообщения отправляются в формате, который крайне похож на используемый при обмене email через интернет (RFC5322) и MIME (Multipurpose Internet Mail extensions – RFC2045). В эти сообщения входит информация от клиента к серверу и ответ от сервера клиенту.

Это сообщение имеет следующий формат:


 HTTP-сообщение   = <Запрос> | <Ответ> ; HTTP/1.1 сообщения

HTTP запрос и HTTP ответ использует для передачи необходимой информации общий формат сообщения RFC822. Это сообщение состоит из следующих четырёх элементов:

  • Стартовая строка (обязательный элемент)
  • Header (опциональный элемент)
  • Пустая строка, которая определят конец полей элемента header (обязательный элемент)
  • Тело сообщения (опциональный элемент)

Стартовая строка

Стартовая строка имеет следующий формат:


стартовая-строка = Строка-Запроса | Строка-Статуса

Рассмотрим отдельно примеры HTTP запроса и HTTP ответа.

HTTP запрос:


GET /рgoodDay.htm HTTP/1.1     (Строка-запрос, сделанный клиентом)

HTTP ответ:


HTTP/1.1 200 OK             (Строка-Статуса, отправленная сервером)

Поля Header

HTTP header обеспечивает необходимую информацию о запросе, ответе или об отправленном объекте в теле сообщения. Существует четыре типа HTTP сообщений header’a:

  • General-header
    Применимы как для запроса, так и для ответа.
  • Request-header
    Применимы только для запроса.
  • Response-header
    Применимы только для ответа.
  • Entity-header
    Определяют метаинформацию об объекте, переданном в теле, либо, если сообщение не содержит тела, о ресурсе, определённом запросом.

Ниже приведены примеры различных полей элемента header:


User-Agent: curl/8.15.2 libcurl/8.15.2 OpenSSL/1.1.5l zlib/1.0.8
Host: www.proselyte.net
Accept-Language: en, ru
Date: Tue, 17 May 2016 00:28:53 GMT
Server: Apache
Last-Modified: Mon, 16 May 2016 23:15:47 GMT
ETag: "xxx-yyy-xxx"
Accept-Ranges: bytes
Content-Length: 873
Vary: Accept-Encoding
Content-Type: text/plain

Тело сообщения

Это опциональный (не обязательный) элемент HTTP сообщения, который содержит объект, связанный с запросом, либо с ответом. Если объект тела связан с обычным Content-Type и Content-Length, то строки элемента header определяют тип конкретного объекта.

Тело сообщения содержит данные  HTTP запроса (тип данных и т.д.), а HTTP ответ содержит данные, полученные от сервера (файлы, изображения и т.д.).

Ниже приведён пример тела сообщения:


<html>
   <body>
      <h1>HTTP Tutorial from Proselyte</h1> 
   </body>
</html>

На этом мы заканчиваем изучение HTTP сообщений.
В следующей статье мы рассмотрим HTTP запросы.