Что такое HTTP/2
Что проверяют
Понимаете ли вы, какую проблему решал HTTP/2 и где проходит граница его возможностей. Для питониста вопрос ещё и эксплуатационный: в каком месте стека этот протокол вообще живёт и умеет ли его ваша клиентская библиотека.
Как отвечать
HTTP/2 сохраняет семантику HTTP (методы, статусы, заголовки), но меняет способ передачи. Вместо текста бинарные кадры, вместо очереди запросов мультиплексирование: в одном соединении идут параллельные потоки, ответы приходят вперемешку и собираются по идентификатору потока. Заголовки сжимаются алгоритмом HPACK с общей таблицей, поэтому повторяющиеся куки и токены не гоняются целиком в каждом запросе. Есть управление потоком и приоритеты.
Практический вывод: приёмы времён HTTP/1.1 становятся вредными. Разнесение статики по нескольким доменам мешает мультиплексированию, а склейка файлов в один ломает гранулярное кэширование.
Для Python стоит добавить, что приложение на WSGI по HTTP/2 не говорит: протокол терминируется на обратном прокси, а внутрь идёт обычный HTTP/1.1. В популярном синхронном клиенте поддержки нет вовсе, в асинхронном она включается дополнительной зависимостью, а gRPC построен на HTTP/2 изначально.
Где спотыкаются
Говорят, что HTTP/2 убрал блокировку в голове очереди. На уровне приложения да, на уровне транспорта нет: потеря одного сегмента тормозит сразу все потоки соединения, и именно ради этого появился QUIC поверх UDP.
Рекламируют серверную отправку ресурсов как живое преимущество. Браузеры от неё отказались, выигрыш на практике не подтвердился, а предзагрузку сегодня решают подсказками о ресурсах и ранними заголовками ответа.
Забывают про TLS и согласование протокола. Браузеры берут HTTP/2 только поверх защищённого соединения, поэтому строчка в конфигурации без сертификата ничего не включит, а открытый вариант встречается разве что внутри периметра.