Отличный вопрос!
HTTP / 2 по TCP страдает от небольшой неэффективности, вызванной TCP.Рассмотрим следующий пример. Предположим, у вас есть 3 потока A, B и C. Обозначим пакеты (кадры) каждого потока строчными буквами (a, b, c) и порядковым номером.Давайте посмотрим, что происходит с HTTP / 2 через TCP при отправке следующей последовательности:
server ---> a2, c2, b2, * c1, b1, a1 ---> client
Где * c1 означает, что этот кадр был потерян.Принимающая сторона (клиент) должна дождаться повторной передачи потерянного кадра * c1, прежде чем она сможет передать более поздние кадры на прикладной уровень (а именно, b2, c2, a2), поскольку связь осуществляется по TCP, а TCP гарантирует порядокДоставка!
Это в отличие от HTTP / 3 и QUIC, где по UDP это просто независимые пакеты, поэтому потеря * c1 не задержит доставку b2, c2 и a2 на прикладной уровень!