Ответ
Основная цель эволюции протокола 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 |