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