Какой протокол используется во второй версии HTTP
Что проверяют
Вопрос с подвохом в формулировке: хотят услышать, что HTTP/2 работает поверх TCP, а HTTP/3 перешёл на QUIC поверх UDP. Дальше проверяют, понимаете ли вы, что изменилось по сравнению с HTTP/1.1 и как это влияет на фронтенд. Следом часто спрашивают про head-of-line blocking.
Как отвечать
Транспорт у HTTP/2 прежний, TCP. Спецификация допускает вариант без шифрования (h2c), но браузеры поддерживают HTTP/2 только поверх TLS, а версия согласуется при рукопожатии через расширение ALPN. Первая спецификация вышла в 2015 году как RFC 7540, актуальная редакция это RFC 9113.
Что поменялось внутри:
- бинарные фреймы: вместо текстовых строк сообщения разбиты на фреймы, их проще и надёжнее разбирать;
- мультиплексирование: много параллельных потоков (streams) в одном соединении. Больше не нужны шесть соединений на хост, как в HTTP/1.1;
- HPACK: сжатие заголовков с общей таблицей, повторяющиеся cookie и
user-agentпочти ничего не стоят; - приоритеты: исходная схема из RFC 7540 в новой редакции объявлена устаревшей, её место занял более простой механизм Extensible Priorities;
- server push: был в стандарте, но не прижился. Вместо него используют
103 Early Hintsи<link rel="preload">.
Для фронтенда вывод такой: доменное шардирование и склейка всего в один бандл ради экономии соединений больше не нужны, шардирование даже вредит, потому что дробит одно соединение на несколько. Мелкие файлы грузятся дешевле, это облегчает разбиение кода на чанки. Протокол видно во вкладке Network в DevTools: колонка Protocol показывает h2 или h3.
Где спотыкаются
Говорят, что HTTP/2 работает на UDP. Это HTTP/3, и там вместо TCP протокол QUIC.
Утверждают, что мультиплексирование полностью убрало блокировку очереди. На уровне HTTP да, но потеря одного TCP-пакета задерживает все потоки соединения. Именно это и решает QUIC.
Предлагают server push как современный способ ускорить загрузку. Браузеры на Chromium отключили его ещё в 2022 году, и рассчитывать на него нельзя.