Структура сообщений 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 уже и в запросе будет тело. Давайте о методах и поговорим теперь.