Чем отличаются HTTP/1.1, HTTP/2 и HTTP/3?
- Что такое мультиплексирование в HTTP/2?
- Зачем HTTP/3 перешёл на UDP?
- Что такое head-of-line blocking?
HTTP/1.1 — текст, один запрос за раз в соединении. HTTP/2 — бинарные кадры, много потоков в одном TCP-соединении. HTTP/3 — то же поверх QUIC (UDP), без общей блокировки при потере пакета.
- 1.1: keep-alive, но браузер открывает ~6 соединений на домен, чтобы распараллелить
- 2: мультиплексирование, сжатие заголовков HPACK, приоритеты
- 2 убрал блокировку на уровне HTTP, но осталась на уровне TCP
- 3: QUIC — TLS 1.3 встроен, 1-RTT (0-RTT повторно), миграция соединения
А ещё Смысл методов, кодов и заголовков одинаков во всех версиях
Подробно
HTTP/1.1 (1997). Текстовый протокол, постоянные соединения (keep-alive) по умолчанию. Но в одном соединении запросы идут по очереди: следующий ответ ждёт предыдущего — блокировка начала очереди на уровне HTTP. Конвейеризация (pipelining) почти не прижилась. Поэтому браузеры открывают около 6 соединений на домен, а сайты раньше раскидывали статику по поддоменам, склеивали файлы и рисовали спрайты.
HTTP/2 (2015). Смысл тот же — методы, заголовки, коды, — меняется передача:
- бинарные кадры вместо текста;
- мультиплексирование — много независимых потоков в одном соединении, кадры перемежаются; не нужны несколько соединений и склейки;
- HPACK — сжатие заголовков с общим словарём: повторяющиеся cookie и user-agent почти ничего не стоят;
- приоритеты потоков и (ныне заброшенный) server push.
Но всё едет по одному TCP: потеря одного пакета задерживает все потоки, пока он не будет переотправлен. На плохих сетях HTTP/2 бывает хуже нескольких соединений HTTP/1.1. gRPC работает поверх HTTP/2.
HTTP/3 (2022) — HTTP поверх QUIC, транспорта на UDP:
- потоки независимы на уровне транспорта — потеря пакета задерживает только свой поток;
- TLS 1.3 встроен: установка соединения и шифрования за 1 RTT вместо 2–3, при повторном подключении 0-RTT;
- соединение определяется идентификатором, а не четвёркой адресов — переживает переход телефона с Wi-Fi на мобильную сеть;
- реализован в пространстве пользователя, поэтому быстрее развивается.
Минусы: UDP иногда режут корпоративные сети (тогда откат на HTTP/2), больше нагрузка на CPU, сложнее отладка.
На практике: между браузером и CDN — HTTP/2 и 3; внутри дата-центра часто HTTP/1.1 с пулом соединений или HTTP/2 для gRPC. Версию выбирают согласованием в TLS (ALPN) и заголовком Alt-Svc для HTTP/3.
Пример
$ curl -sI --http2 https://example.com | head -1
HTTP/2 200
$ curl -sI https://cloudflare.com | grep -i alt-svc
alt-svc: h3=":443"; ma=86400 # сервер предлагает HTTP/3Что хотят услышать
- Проблема HTTP/1.1: последовательные запросы и много соединений.
- HTTP/2: бинарные кадры, мультиплексирование, HPACK.
- Почему блокировка осталась на TCP и как её решает QUIC.
- Плюсы HTTP/3: быстрое установление, миграция; минусы — плюс.
Частые ошибки
- Думать, что HTTP/2 поменял семантику — методы и коды те же.
- Считать HTTP/3 «HTTP поверх голого UDP» без надёжности.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓HTTP/2 — много потоков в одном TCP; HTTP/3 — поверх QUIC (UDP)
- ✗HTTP/3 работает поверх TCP с новым форматом заголовков
- ✗HTTP/1.1 мультиплексирует запросы в одном соединении
- ✗HTTP/2 — текстовый протокол, HTTP/1.1 — бинарный
Что спросят дальше
Разбор темы
- HTTP и HTTPS — методы, коды ответа, версии
Методы и идемпотентность, группы кодов ответа, REST, отличия HTTP/1.1, HTTP/2 и HTTP/3, как HTTPS защищает соединение.
- TCP изнутри — рукопожатие, надёжность и перегрузка
Как устанавливается и закрывается соединение, откуда TIME_WAIT, как TCP гарантирует доставку и не перегружает сеть, что добавляет TLS.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.