Структура сообщений HTTP
HTTP-сообщение состоит из трёх частей, только первая из которых является обязательной.
Стартовая строка
Заголовки
Тело сообщения
Стартовая строка
Стартовые строки HTTP-запроса и ответа выглядят по-разному.
HTTP-Запрос
METHOD URI HTTP_VERSIONМетод определяет, какое действие клиент хочет совершить: получить данные, создать объект, обновить его, удалить. URI - идентификатор ресурса, куда клиент обращается или иными словами путь к ресурсу/документу. HTTP_VERSION - соответственно версия HTTP. На сегодняшний день для REST это всегда 1.1.
- Пример:
GET /api/dcim/devices/1/ HTTP/1.1
HTTP-Ответ
HTTP_VERSION STATUS_CODE REASON_PHRASEHTTP_VERSION - версия HTTP (1.1).STATUS_CODE - три цифры кода состояния (200, 404, 502 итд)REASON_PHRASE - Пояснение (OK, NOT FOUND, BAD GATEWAY итд)
- Пример:
HTTP/1.1 200 OK
Заголовки
В заголовках передаются параметры данной HTTP-транзакции.
Например, в примере выше в HTTP-запросе это были:
Host: netbox.linkmeup.ru:45127 User-Agent: curl/7.54.0 Accept: application/json; indent=4
В них указано, что
Обращаемся к хосту netbox.linkmeup.ru:45127,
Запрос был сгенерирован в curl,
А принимаем данные в формате JSON с отступом 4.
А вот какие заголовки были в HTTP-ответе:
Server: nginx/1.14.0 (Ubuntu) Date: Tue, 21 Jan 2020 15:14:22 GMT Content-Type: application/json Content-Length: 1638 Connection: keep-alive
В них указано, что
Тип сервера: nginx на Ubuntu,
Время формирования ответа,
Формат данных в ответе: JSON
Длина данных в ответе: 1638 байтов
Соединение не нужно закрывать - ещё будут данные.
Заголовки, как вы уже заметили, выглядят как пары имя:значение, разделённые знаком “:”.
Тело HTTP-сообщения
Тело используется для передачи собственно данных. В HTTP-ответе это может быть HTML-страничка, или в нашем случае JSON-объект.
Между заголовками и телом должна быть как минимум одна пустая строка.
При использовании метода GET в HTTP-запросе обычно никакого тела нет, потому что передавать нечего. Но тело есть в HTTP-ответе. А вот например, при POST уже и в запросе будет тело. Давайте о методах и поговорим теперь.