Как уже упоминалось в предыдущей статье, 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 запросы.