Как HTTP / 2 обеспечивает более высокую скорость просмотра по сравнению с HTTP / 1.1?
Я читал, читаястатью о запуске HTTP/2. Было сказано, что HTTP / 2 основан на протоколе SPDY (speedy) и может обеспечить более высокую скорость просмотра по сравнению с HTTP / 1.1, используя " сжатие поля заголовка "и"мультиплексирование". Как именно работают эти термины?
Должен ли я верить, что в HTTP/1.1 запросы обрабатываются "один за другим"?
2 ответа:
Мультиплексирование
С HTTP 1.1 много времени тратится только на ожидание. Браузер отправляет запросы и ждет ответа, чтобы вернуться, а затем отправляет другой GET и т. д. Неэффективное использование полосы пропускания. Иногда он будет использовать конвейерную обработку, но это тоже страдает, что иногда запросы должны ждать запросов, сделанных ранее. Глава проблемы блокировки линий.
С мультиплексированием практически нет ожидания, но браузеры могут просто попросить сотни вещей в один раз, и они будут доставлены в любом порядке, в каком они могут быть доставлены, и без отдельных потоков или объектов, которые должны ждать друг друга. (С приоритезацией и контролем потока, чтобы помочь контролировать их должным образом.)
Это будет наиболее заметно на соединениях с высокой задержкой. Для наглядной и ясной демонстрации того, что он может сделать, смотрите демонстрацию gophertiles голанга на https://http2.golang.org/gophertiles?latency=1000 (требуется браузер с поддержкой HTTP / 2)
Заголовок сжатие
Кроме того, HTTP / 2 предлагает сжатие заголовков, которое позволяет клиенту сжимать больше запросов ранее в течение срока службы TCP-соединения. В ранний период медленного запуска нового TCP-соединения может быть полезно втиснуть больше запросов, чтобы ответы возвращались раньше. Заголовки HTTP чрезвычайно повторяющиеся по своей природе.
Сервер push
Сервер HTTP / 2 может отправлять данные клиенту так, как если бы клиент попросил об этом, прежде чем клиент сам напросился! Если сервер думает, что клиент, вероятно, захочет/будет нуждаться в этом тоже, и таким образом половина RTT может быть сохранена.
Начиная с HTTP / 2, можно сжимать как заголовки, так и содержимое HTTP-ответа. При использовании HTTP/1.1 заголовки никогда не сжимаются вопреки содержимому (заданному в заголовке кодирования содержимого).
Мультиплексирование связано с принудительным запуском сервера. На самом деле, когда сервер отправляет HTML-страницу, он может использовать то же самое соединение для отправки дополнительных ресурсов, таких как файлы css и javascript. Если HTML-страница должна загрузить эти дополнительные скрипты, больше запрос не будет отправлен на сервер, так как они были уже отправлены ранее.