Является ли протокол HTTP текстовым или бинарным?

«Является ли протокол HTTP текстовым или бинарным?» — вопрос из категории Сети, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Классический HTTP/1.x — это текстовый (текстоориентированный) протокол.

Признаки текстового протокола:

  • Запросы и ответы состоят из читаемых ASCII/UTF-8 строк.
  • Структура определяется символами перевода строк (rn) и разделителями (двойной rn между заголовками и телом).
  • Методы (GET, POST), коды статуса (200 OK), заголовки — все передаются в текстовом виде.

Пример HTTP/1.1 запроса:

GET /api/data HTTP/1.1
Host: example.com
User-Agent: MyClient/1.0
Accept: application/json

Эволюция в сторону бинарных форматов:

  • HTTP/2 сохраняет текстовую семантику (те же методы, заголовки), но передаёт данные в бинарных фреймах для повышения эффективности (мультиплексирование, сжатие заголовков HPACK).
  • HTTP/3 (на основе QUIC) также использует бинарные фреймы.

Тело запроса/ответа (body) может содержать любые данные, как текстовые (JSON, XML), так и бинарные (изображения, файлы).

Вывод: HTTP/1.x — текстовый. HTTP/2 и HTTP/3 используют бинарную передачу для оптимизации, но логически остаются текстовыми протоколами.