Разница между HTTP-конвейером и мультиплексированием HTTP с SPDY

Благодаря Google и переполнению стека, я думаю, что я понял разницу между обычной конвейерной HTTP-связью и мультиплексированием HTTP (например, с SPDY), поэтому я сделал диаграмму ниже, чтобы показать различия между конвейерной обработкой и мультиплексированием на основе трех обычных HTTP-запросов.

enter image description here

Мои два вопроса:

  • Правильно ли это изображение?
  • Правда ли, что если в конвейерной обработке не будет проблема блокировки заголовка, это будет так же быстро, как и мультиплексирование HTTP? Или я пропустил дополнительную разницу?

Ответ 1

Это не неверно, но есть важный аспект, который он опускает. HTTP требует, чтобы вы передавали весь ответ до того, как любой другой запрос может продолжить. То, что вы показываете на диаграмме, верно в том смысле, что при SPDY мы можем, наконец, сломать требование "голова строки" и доставить ответы по мере их появления. Однако нам также не нужно ждать завершения любого запроса.

Представьте себе два запроса, размер которых несколько kb: каждый запрос будет иметь несколько пакетов, назовите их [r1p1, r1p2] и [r2p1, r2p2]. HTTP требует, чтобы pN прибыл в точном порядке. SPDY, с другой стороны, позволяет нам: [r2p1, r1p1, r1p2, r2p2].

Также стоит упомянуть, что с помощью SPDY мы можем использовать приоритеты запроса, чтобы намекнуть на сервер, какие запросы должны иметь приоритет, даже если он поступит позже на провод (среди полдюжины других замечательных функций).