Как HTTP/2 обеспечивает более высокую скорость просмотра по сравнению с HTTP/1.1?

Я читал статья о запуске HTTP/2. Было сказано, что HTTP/2 основан на протоколе SPDY (скоростной) и может обеспечить более высокую скорость просмотра по сравнению с HTTP/1.1 за счет использования «сжатия поля заголовка» и «мультиплексирования». Как именно работают эти термины?

Должен ли я верить, что в HTTP/1.1 запросы обрабатываются «один за другим»?


person Anonymous Platypus    schedule 25.02.2015    source источник


Ответы (2)


Мультиплексирование

С HTTP 1.1 много времени тратится на простое ожидание. Браузер отправляет запросы и ждет ответа, а затем отправляет еще один GET и т. д. Неэффективное использование полосы пропускания. Время от времени он будет использовать конвейерную обработку, но это тоже страдает от того, что иногда запросы должны ждать запросов, выполненных ранее. Проблема блокировки головы линии.

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

Это будет наиболее заметно на соединениях с высокой задержкой. Наглядную и понятную демонстрацию того, что он может делать, см. в демонстрационной версии gophertiles golang по адресу https://http2.golang.org/gophertiles?latency=1000 (требуется браузер с поддержкой HTTP/2)

Сжатие заголовков

Кроме того, HTTP/2 предлагает сжатие заголовков, что позволяет клиенту обрабатывать больше запросов на более ранних этапах существования TCP-соединения. В начале периода медленного запуска нового TCP-соединения может быть полезно втиснуть больше запросов, чтобы ответы возвращались раньше. Заголовки HTTP чрезвычайно повторяющиеся по своей природе.

Отправить на сервер

Сервер HTTP/2 может отправлять данные клиенту как если бы клиент запросил их, до того, как клиент запросит их! Если сервер считает, что клиент, вероятно, тоже этого захочет/нуждается, то можно сэкономить половину RTT.

person Daniel Stenberg    schedule 06.03.2015
comment
Я думаю, что это ответ, который я ищу :)` - person Anonymous Platypus; 07.04.2015

Начиная с HTTP/2, как заголовки, так и содержимое ответа HTTP могут быть сжаты. В HTTP/1.1 заголовки никогда не сжимаются вопреки содержимому (указанному заголовком Content-Encoding).

Мультиплексирование связано с server-push. На самом деле, когда сервер отправляет HTML-страницу, он может использовать то же соединение для передачи дополнительных ресурсов, таких как файлы css и javascript. Если HTML-странице необходимо загрузить эти дополнительные сценарии, на сервер больше не будет отправляться запрос, поскольку они уже были отправлены ранее.

person Guillaume D.    schedule 25.02.2015
comment
Большинство алгоритмов сжатия — это deflate и gzip, но технически протокол позволяет указать любой другой метод, потому что вы явно указываете, какой из них используется в заголовке Content-Encoding). - person Guillaume D.; 26.02.2015
comment
Мультиплексирование на самом деле не связано с серверным толчком. Речь идет о разрешении нескольких одновременных переводов одновременно. - person Daniel Stenberg; 07.03.2015