В чем различия между HTTP/1.1 и HTTP/2
Что проверяют
Понимаете ли вы, что решает мультиплексирование, и знаете ли, что часть старых оптимизаций во второй версии стала вредной.
Как отвечать
Главные отличия:
- бинарный формат вместо текстового: разбор быстрее и однозначнее;
- мультиплексирование: несколько запросов и ответов идут параллельно в одном соединении. В HTTP/1.1 на соединение приходился один запрос за раз, поэтому браузеры открывали по шесть соединений на домен и всё равно упирались в очередь;
- сжатие заголовков (HPACK): повторяющиеся заголовки и cookie не передаются целиком каждый раз;
- приоритеты потоков: клиент может сказать, что важнее;
- server push: сервер отправляет ресурс до запроса. На практике оказался бесполезным и в браузерах отключён.
Что из этого следует для разработки: приёмы, которые ускоряли HTTP/1.1, теперь мешают. Склейка спрайтов и объединение всех скриптов в один файл ухудшают кэширование и убивают параллельность; раскладывание ресурсов по нескольким доменам (доменное шардирование) вредит, потому что ломает единое соединение и требует лишних рукопожатий.
Осталась и общая проблема: блокировка головы очереди на уровне TCP. Потерянный пакет задерживает все потоки, потому что транспорт один. Именно её решает HTTP/3 поверх QUIC и UDP, где потери в одном потоке не задевают остальные.
Где спотыкаются
Считают, что HTTP/2 требует HTTPS по стандарту: формально нет, но браузеры поддерживают только по TLS.
Продолжают объединять всё в один бандл и шардировать домены.
Думают, что мультиплексирование снимает блокировку головы очереди целиком.
Не знают, что server push отключён и заменён подсказками preload и 103 Early Hints.