> Какие части HTTP-запроса (хедеры, тело) шифруются в HTTPS (iOS, Swift)

Уровень: middle · Роль: mobile · Категория: Технические вопросы

Компании: Битрикс24

Стек: iOS, Swift

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

Короткий ответ

В HTTPS шифруется всё содержимое HTTP-запроса: и хедеры, и тело, и строка запроса (method, path, query-параметры). Шифрование происходит на уровне TLS, который работает ниже HTTP. Не шифруются только IP-адреса и порты, а также DNS-запросы (если не используется DoH/DoT). Это значит, что перехватчик видит факт соединения с хостом, но не видит, какие именно данные передаются внутри.

Подробное объяснение

HTTPS - это HTTP поверх TLS (ранее SSL). TLS устанавливает зашифрованный туннель между клиентом и сервером, и весь HTTP-трафик - включая request line, headers, body - передаётся внутри этого туннеля.

Что именно шифруется:

  • метод и path (например, POST /api/v1/users?page=2)
  • все заголовки, включая Authorization, Cookie, Content-Type
  • тело запроса и ответа

Что остаётся видимым для наблюдателя:

  • IP-адрес и порт сервера (видны на сетевом уровне)
  • размер передаваемых данных (приблизительно, из-за TLS-записей)
  • факт установления соединения и его длительность
  • SNI (Server Name Indication) - доменное имя в TLS-рукопожатии, если не используется ECH (Encrypted Client Hello)

Важно понимать: шифрование не защищает от анализа трафика по размеру и таймингу. Например, если приложение отправляет запросы разного размера в зависимости от действий пользователя, это может быть использовано для утечки информации.

На практике

Для iOS-разработчика это означает:

  • Не нужно вручную шифровать данные в теле запроса - TLS уже делает это. Двойное шифрование (например, поверх HTTPS ещё и свой AES) обычно избыточно и только замедляет работу.
  • Заголовки с чувствительными данными (токены, cookies) безопасно передавать в HTTPS без дополнительной защиты.
  • Для отладки сетевых запросов в iOS используется URLSession, и при перехвате через Charles или Proxyman вы видите расшифрованный трафик только потому, что инструмент устанавливает свой сертификат и выступает как MITM-прокси. В реальной сети без доверенного сертификата расшифровка невозможна.
  • Если нужно скрыть сам факт обращения к определённому домену, HTTPS не поможет - для этого используются VPN, Tor или ECH.

Пример кода

Пример не требуется - вопрос концептуальный, не про код.

Как отвечать на собеседовании

Начните с прямого ответа: шифруется всё содержимое HTTP-запроса. Затем кратко объясните механизм: TLS создаёт зашифрованный канал, и HTTP работает внутри него. Упомяните, что не шифруется: IP, порт, размер данных, SNI. Если спросят про iOS - скажите, что URLSession автоматически использует TLS для HTTPS, и дополнительных действий не требуется. Можно добавить, что для защиты от анализа трафика используются дополнительные механизмы (VPN, padding). Не углубляйтесь в детали TLS-рукопожатия, если не спрашивают.

Что проверяет интервьюер

  • Понимание модели OSI и того, на каком уровне работает шифрование
  • Знание, что TLS шифрует весь HTTP-поток, а не только тело
  • Осознание границ HTTPS: что остаётся видимым (метаданные)
  • Понимание, что в iOS не нужно вручную шифровать данные поверх HTTPS

Типичные ошибки

  • Ответ "шифруется только тело" - это неверно, хедеры и строка запроса тоже шифруются
  • Утверждение, что шифруются IP-адреса или DNS - это не так (без дополнительных технологий)
  • Путаница между TLS и HTTP-уровнем: "HTTPS шифрует" - корректнее сказать "TLS, поверх которого работает HTTP, шифрует"
  • Упоминание, что "всё шифруется полностью" - это тоже ошибка, так как метаданные соединения остаются видимыми

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью