Из чего состоит HTTP-ответ?

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

Ответ

HTTP-ответ, отправляемый сервером клиенту, имеет строго определённую структуру согласно RFC. С точки зрения DevOps важно понимать её для отладки, логирования и настройки веб-серверов/прокси.

Структура ответа:

  1. Строка статуса (Status Line):

    • Версия протокола (например, HTTP/1.1 или HTTP/2).
    • Код состояния (Status Code) — трёхзначное число, указывающее на результат запроса.
      • 1xx — информационные (например, 101 Switching Protocols для WebSockets).
      • 2xx — успех (200 OK, 201 Created, 204 No Content).
      • 3xx — перенаправление (301 Moved Permanently, 302 Found, 304 Not Modified).
      • 4xx — ошибка клиента (400 Bad Request, 403 Forbidden, 404 Not Found, 429 Too Many Requests).
      • 5xx — ошибка сервера (500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable, 504 Gateway Timeout).
    • Пояснение к коду (Reason Phrase) — краткое текстовое описание кода (например, OK, Not Found).
      HTTP/1.1 200 OK
  2. Заголовки (Headers): Метаданные ответа в формате Key: Value. Важные для DevOps заголовки:

    • Content-Type: text/html; charset=utf-8 — тип и кодировка тела ответа.
    • Content-Length: 125 — размер тела в байтах.
    • Cache-Control: max-age=3600, public — инструкции кэширования для клиентов и прокси.
    • Server: nginx/1.18.0 — информация о сервере (часто маскируется в целях безопасности).
    • Set-Cookie: sessionId=abc123; Path=/; HttpOnly — установка куки.
    • Location: https://new.example.com — для редиректов (3xx).
    • X-Request-ID: 8a7f6e — пользовательский заголовок для сквозной трассировки запросов в микросервисной архитектуре.
      Date: Mon, 27 Mar 2023 10:00:00 GMT
      Content-Type: application/json
      Cache-Control: no-cache
  3. Пустая строка (CRLF) — обязательный разделитель между заголовками и телом.

  4. Тело ответа (Body): Необязательная часть, содержащая запрошенные данные (HTML-страницу, JSON, изображение и т.д.). Отсутствует у ответов с кодом 204 No Content или 304 Not Modified.

    {"status": "success", "data": {"id": 42}}

Полный пример ответа от API:

HTTP/1.1 201 Created
Content-Type: application/json; charset=utf-8
Content-Length: 52
X-Powered-By: Express
X-Request-ID: req-789xyz
Date: Mon, 27 Mar 2023 10:00:00 GMT

{"id": 1001, "message": "Resource created successfully"}

Инструменты для анализа: curl -v, telnet, DevTools в браузере, tcpdump, а также логи веб-серверов (Nginx/Apache) и инструменты мониторинга (Prometheus, Grafana с метриками по кодам ответа).