Из чего состоит HTTP-сообщение? Опишите структуру запроса и ответа.

Ответ

HTTP-сообщение — это основная единица обмена данными в протоколе HTTP. Существует два типа сообщений: запрос (от клиента к серверу) и ответ (от сервера к клиенту). Оба имеют схожую структуру: стартовая строка, заголовки и, опционально, тело сообщения.

HTTP-запрос (Request)

1. Стартовая строка (Start Line): Содержит три элемента:

  • Метод: GET, POST, PUT, DELETE и др. Определяет действие, которое нужно выполнить.
  • URI (Uniform Resource Identifier): Путь к ресурсу, например /users/123.
  • Версия HTTP: Например, HTTP/1.1 или HTTP/2.

2. Заголовки (Headers): Пары Ключ: Значение, которые передают метаинформацию о запросе (например, Host, User-Agent, Accept, Content-Type).

3. Тело (Body): Необязательная часть, содержащая данные, отправляемые на сервер (например, JSON-объект в POST-запросе). Отделяется от заголовков пустой строкой.

Пример запроса:

POST /api/users HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 27

{"username": "test", "age": 30}

HTTP-ответ (Response)

1. Стартовая строка (Status Line): Содержит три элемента:

  • Версия HTTP: HTTP/1.1.
  • Код состояния: Числовой код, сообщающий о результате запроса (200, 404, 500).
  • Пояснение: Текстовое описание кода состояния (OK, Not Found, Internal Server Error).

2. Заголовки (Headers): Пары Ключ: Значение, описывающие ответ (Content-Type, Content-Length, Server).

3. Тело (Body): Необязательная часть, содержащая запрошенный ресурс или информацию об ошибке.

Пример ответа:

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 17

{"status": "ok"}

В Go для работы с HTTP используется стандартный пакет net/http.