В этой статье анализируются и сравниваются различия между HTTP1.0 и HTTP1.1 с точки зрения производительности связи. И разница между HTTP1.1 и HTTP2.0. Детали этой статьи организованы следующим образом
содержание
1. Разница в производительности связи между HTTP1.0 и HTTP1.1
- постоянное соединение
- трубопроводная технология
2. Разница в производительности связи между HTTP2.0 и HTTP1.1
- мультиплексирование
- Сжатие заголовков протокола HTTP
текст
1. Разница в производительности связи между HTTP1.0 и HTTP1.1
-
постоянное соединение
HTTP 1.1 по умолчанию поддерживает постоянные соединения. Для поддержки постоянных соединений в HTTP 1.0 необходимо отображать указанный заголовок Keep-alived.
1. Связь по протоколу HTTP при непостоянном соединении
- Например, посетите URL-адрес www.taobao.com. При доступе к этому URL-адресу с целевого сервера сначала будет отправлен статический ресурс, такой как HTML, и соединение будет автоматически разорвано после того, как сервер вернет ресурс.Это непостоянный процесс связи HTTP. Процесс включает в себя трехстороннее рукопожатие TCP и четыре взмаха руки.
- Кроме того, статический HTML должен включать в себя множество ресурсов, таких как изображения, js, css и т. д., и все они хранятся на сервере. Доступ к этим ресурсам будет повторять описанный выше процесс связи HTTP, который включает в себя трехстороннее рукопожатие TCP и четыре взмаха рук. Этот процесс многократного установления и разрыва TCP-соединений, несомненно, тратит впустую много ресурсов пропускной способности сервера, а также снижает скорость загрузки веб-страниц.Процесс связи по протоколу HTTP при непостоянном соединении показан на следующем рисунке.
2. Связь по протоколу HTTP при постоянном соединении
Постоянные соединения легко понять. После процесса связи HTTP сервер не отключит соединение, пока не будет уведомлен о закрытии соединения, но сохранит соединение. Таким образом, при посещении такой страницы, как www.taobao.com, большая часть ресурсов на странице может быть передана по одному TCP-каналу. Это значительно снижает потери производительности, вызванные несколькими TCP-соединениями и разъединениями.Связь при постоянном соединении показана на следующем рисунке.
- трубопроводная технология
Конвейерная технология основана на постоянных соединениях для дальнейшего повышения производительности связи. При постоянных соединениях запросы и ответы выполняются последовательно. Следующий запрос может быть отправлен только после ответа на предыдущий запрос.Конвейерная обработка — это возможность последовательно отправлять несколько ответов, когда ответы не получены.
2. Сравнение производительности связи между HTTP2.0 и HTTP1.1.
-
технология мультиплексирования
Технология мультиплексирования основана на постоянных соединениях, позволяющих всем запросам использовать одно и то же соединение.и может передавать параллельно. Разница между методом мультиплексирования и методом конвейерной обработки заключается в следующем:
- Во всех конвейерных технологиях запросы отправляются последовательно. При мультиплексировании все запросы отправляются параллельно.
-
сжатие заголовка
Сжатие заголовков также проще для понимания, уменьшая накладные расходы на поля заголовков в HTTP-пакетах и повышая эффективность связи. Есть две основные причины использования сжатия заголовков:
(1) Для одного HTTP-пакета при передаче меньшего количества данных связи размер заголовка пакета будет намного больше, чем эффективные данные связи, что приводит к низкому использованию полосы пропускания.
(2) При постоянном соединении часто повторяются поля заголовка при передаче между несколькими передаваемыми пакетами HTTP.
Алгоритм сжатия заголовков, предложенный HTTP2.0, оптимизирован для двух вышеуказанных пунктов:
-
Сжатие на основе статического словаря Статический словарь поддерживается совместно клиентом и сервером в протоколе HTTP. В статическом словаре хранится большое количество общих полей заголовка HTTP. Например, следующий статический словарь:
В статическом словаре зарезервированы два случая:- Заполните заголовки и значения полей, например Content-Language:zh-CN.
- Полный заголовок, например User-agent.
На основе статического словаря номер индекса в статическом словаре можно использовать для замены заголовка в HTTP.Вообще говоря, одного байта достаточно, чтобы покрыть все номера индексов в статическом словаре. Как показано на рисунке ниже, для замены заголовка HTTP используется байтовый формат, а индекс — это номер индекса в статическом словаре.
-
Сжатие на основе динамического словаря
Статический словарь не может охватить все комбинации пар ключ-значение HTTP-заголовка, поэтому сжатие динамического словаря дополняется на основе сжатия статического словаря.
Процесс сжатия динамического словаря относительно прост. Если встречается поле заголовка HTTP, которого нет в статическом словаре, здесь используется несжатая передача, а затем поле заголовка добавляется к динамическому полю. Когда то же самое поле заголовка передается в следующий раз, поле заголовка может быть сжато в соответствии с содержимым динамического словаря.
- Чем дольше процесс связи, тем больше контента будет накапливаться в динамическом словаре, поэтому эффект сжатия заголовков HTTP будет лучше.
- Содержимое динамического словаря сбрасывается при новом установлении соединения.
-