Какие метаданные клиент отправляет на сервер при установлении соединения?

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

Ответ

С точки зрения DevOps, понимание этих метаданных критично для настройки балансировщиков, брандмауэров (WAF) и логирования. При установке TCP-соединения и последующем HTTP(S)-запросе клиент передает:

1. На транспортном уровне (TCP Handshake):

  • IP-адрес и порт источника — основа для любых правил сетевой фильтрации (iptables, security groups).

2. На уровне приложения (HTTP/HTTPS):

  • Заголовки HTTP-запроса:
    • Host — целевой домен (важен для виртуальных хостов в Nginx/Apache).
    • User-Agent — тип и версия клиента (браузер, curl, бот). Используется для анализа трафика и блокировки скребков.
    • Accept-* (Accept, Accept-Language, Accept-Encoding) — предпочтения клиента по контенту.
    • Connection — управление持久ными соединениями (keep-alive).
    • Cookie — данные сессии для аутентификации и трекинга.
    • Referer / Referrer-Policy — URL источника запроса.
    • X-Forwarded-For (XFF), X-Real-IP — передаются прокси-серверами для указания исходного IP клиента.

3. Для HTTPS (TLS Handshake):

  • Server Name Indication (SNI) — доменное имя, которое клиент хочет достичь. Это позволяет на одном IP-адресе размещать несколько SSL-сертификатов.
  • Поддерживаемые шифры и версии TLS — клиент "предлагает" их серверу для согласования.

Пример из практики — логирование в Nginx для анализа: Я настраиваю формат лога, чтобы включать ключевые метаданные:

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                '$status $body_bytes_sent "$http_referer" '
                '"$http_user_agent" "$http_x_forwarded_for"';

Это позволяет позже анализировать трафик, выявлять аномалии и понимать, кто и как обращается к сервисам.