Из каких компонентов состоит HTTP-запрос в клиент-серверной архитектуре?

«Из каких компонентов состоит HTTP-запрос в клиент-серверной архитектуре?» — вопрос из категории Архитектура, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

HTTP-запрос, передаваемый от клиента к серверу, состоит из стартовой строки, заголовков и опционального тела.

Структура запроса:

  1. Стартовая строка (Request Line)

    • Метод HTTP (например, GET, POST).
    • Путь к ресурсу (URI) (например, /api/v1/users).
    • Версия протокола (например, HTTP/1.1 или HTTP/2).

    Пример: GET /api/v1/users HTTP/1.1

  2. Заголовки (Headers)

    • Общие заголовки: Host, User-Agent.
    • Заголовки запроса: Authorization, Accept, Content-Type.
    • Заголовки тела: Content-Length, Content-Encoding.
  3. Тело запроса (Body)

    • Присутствует у методов POST, PUT, PATCH.
    • Содержит данные в формате, указанном в Content-Type (JSON, XML, form-data).

Полный пример запроса:

POST /api/v1/users HTTP/1.1
Host: api.example.com
Content-Type: application/json
Authorization: Bearer token123
Content-Length: 56

{"name": "Alice", "email": "alice@example.com"}

Ключевой принцип: Запрос содержит что сделать (метод и URI), как обработать (заголовки) и данные (тело). Ответ сервера имеет аналогичную структуру с кодом состояния.