Каковы основные различия между версиями HTTP/1.1, HTTP/2 и HTTP/3?

Ответ

Основная цель эволюции протокола HTTP — повышение производительности и уменьшение задержек при загрузке веб-ресурсов. Каждая версия решала проблемы предыдущей.

HTTP/1.1 (1997)

  • Основа: Работает поверх TCP.
  • Ключевая особенность: Ввел постоянные соединения (keep-alive), позволяя выполнять несколько запросов в рамках одного TCP-соединения.
  • Главная проблема: Блокировка очереди (Head-of-Line blocking). Запросы в одном соединении должны выполняться строго последовательно. Потеря одного пакета останавливает всю очередь.

HTTP/2 (2015)

  • Основа: Работает поверх TCP.
  • Ключевые улучшения:
    • Мультиплексирование: Позволяет отправлять несколько запросов и ответов параллельно в одном TCP-соединении, решая проблему HOL blocking на уровне приложения.
    • Бинарный протокол: Вместо текстового, что упрощает и ускоряет парсинг.
    • Сжатие заголовков (HPACK): Уменьшает объем передаваемых метаданных.
    • Server Push: Сервер может отправлять ресурсы, которые, по его мнению, понадобятся клиенту, не дожидаясь запроса.
  • Ограничение: Все еще подвержен HOL blocking на уровне транспорта (TCP). Потеря одного TCP-пакета может затормозить все потоки данных.

HTTP/3 (2022)

  • Основа: Работает поверх QUIC (который, в свою очередь, работает через UDP).
  • Ключевые улучшения:
    • Решение проблемы HOL blocking на уровне транспорта: QUIC имеет независимые потоки. Потеря пакета в одном потоке не влияет на другие.
    • Ускоренное установление соединения: Объединяет рукопожатия TCP и TLS, сокращая задержки.
    • Встроенное шифрование: TLS 1.3 является неотъемлемой частью QUIC.
Версия Транспорт Мультиплексирование HOL Blocking Сжатие заголовков
HTTP/1.1 TCP Нет Да (на уровне приложения) Нет
HTTP/2 TCP Да Да (на уровне TCP) HPACK
HTTP/3 QUIC (UDP) Да Нет QPACK