Версии протокола HTTP

HTTP (HyperText Transfer Protocol) — прикладной протокол передачи данных, лежащий в основе веба. За три десятилетия он прошёл путь от однострочного текстового запроса до бинарного протокола поверх UDP.


HTTP/0.9 (1991)

Самая первая версия — скорее прототип, чем полноценный протокол.

Возможности:

  • Только метод GET
  • Нет заголовков
  • Нет кодов состояния
  • Ответ — чистый HTML-текст
  • После ответа соединение немедленно закрывается

HTTP/1.0 (1996) · RFC 1945

Первый стандартизированный вариант с реальной функциональностью.

Нововведения:

  • Методы GET, POST, HEAD
  • HTTP-заголовки (Content-Type, Content-Length и др.)
  • Коды состояния (200, 404, 500…)
  • Версия протокола в строке запроса
  • Базовое кэширование через Expires

Ограничения:

  • Каждый запрос = отдельное TCP-соединение
  • Нет поддержки виртуального хостинга
  • Нет постоянных соединений

HTTP/1.1 (1997) · RFC 9112

Самый долгоживущий стандарт — до сих пор широко используется.

Ключевые нововведения:

  • Keep-Alive — постоянное соединение, несколько запросов по одному TCP
  • Обязательный заголовок Host — открыл виртуальный хостинг
  • Chunked Transfer Encoding — передача данных блоками без указания длины заранее
  • Методы: PUT, DELETE, OPTIONS, CONNECT, TRACE (PATCH добавлен позже — RFC 5789, 2010)
  • Кэширование: Cache-Control, ETag, Last-Modified
  • Pipelining — возможность отправлять несколько запросов без ожидания ответа

Проблемы:

  • Head-of-Line (HOL) blocking — медленный запрос блокирует очередь
  • Браузеры открывали до 6 параллельных соединений на домен как обходной путь
  • Заголовки передаются в текстовом виде и не сжимаются

HTTP/2 (2015) · RFC 9113

Революция в транспортном слое. Семантика та же, способ передачи — другой.

Ключевые нововведения:

  • Бинарный формат — вместо текста; быстрее парсится, меньше ошибок
  • Мультиплексирование — несколько запросов параллельно по одному TCP-соединению
  • Сжатие заголовков HPACK — заголовки не дублируются, хранятся в таблице
  • Server Push — сервер отправляет ресурсы (CSS, JS) до запроса браузера
  • Приоритизация — клиент может задавать приоритет потокам
  • Требует HTTPS де-факто (браузеры поддерживают только over TLS)

Проблемы:

  • HOL-blocking перешёл на уровень TCP: потеря пакета останавливает все потоки
  • Server Push оказался редко используемым на практике

Связанные технологии:

  • Основан на протоколе SPDY от Google
  • HPACK — алгоритм сжатия заголовков

HTTP/3 (2022) · RFC 9114

Главное изменение — замена TCP на QUIC поверх UDP.

Ключевые нововведения:

  • QUIC вместо TCP — каждый поток независим, потеря пакета не блокирует остальные
  • 0-RTT / 1-RTT — рукопожатие QUIC (транспорт) и TLS 1.3 объединены в одно; TCP не используется (QUIC поверх UDP), поэтому почти нет задержки при первом запросе
  • Миграция соединения — при смене сети (Wi-Fi → LTE) соединение не разрывается; используется Connection ID вместо IP:порт
  • TLS 1.3 встроен в QUIC — шифрование обязательно на уровне протокола
  • QPACK — новый алгоритм сжатия заголовков (без проблем с блокировкой как у HPACK)

Где уже используется:

  • Cloudflare, Google, YouTube, Meta — все поддерживают HTTP/3
  • Nginx ≥ 1.25, Caddy, LiteSpeed

См. также