Краткий доклад: бинарные фреймы, потоки и мультиплексирование HTTP 2.0

HTTP Android
Краткий доклад: бинарные фреймы, потоки и мультиплексирование HTTP 2.0

Автор: Линь Гуаньхун / Призраки под рукой

Самородки:Талант /user/178526…

Блог:www.cnblogs.com/linguanh/

Гитхаб:GitHub.com/afan913337456…

Облачная колонка Tencent:cloud.Tencent.com/developer/U…

Колонка блокчейна червоточины:woohoo.impulsecommunity.com/article/153…


Версия 2.0 протокола передачи гипертекста HTTP была выпущена в 2015 году. По сравнению с предыдущей версией HTTP 1.1. Он добавляет следующие три основные новые функции.

  • После установления соединения вы можете多路复用
  • После установления соединения запрос и ответ обрабатываются как
  • Передача данных делится на二进制帧Фрагмент

Можно сказать, что HTTP 2.0 представляет собой огромную оптимизацию для решения проблемы задержки HTTP. Ссылка ниже представляет собой интуитивно понятный веб-сайт в Интернете, который показывает трудоемкую загрузку тех же более 300 изображений по протоколам HTTP 1.1 и HTTP 2.0 соответственно. HTTP 2.0 почти в 6 раз быстрее, чем HTTP 1.1.

демо


Давайте познакомимся с ними интуитивно.

прежде всего二进制帧

В протоколе TCP единицей передачи данных является数据报. Данные разделены на две части. Заголовок и фактическая часть данных (тело).

В HTTP 2.0 дейтаграмма разбивается на две части.header frameа такжеdata frame. То есть кадр заголовка и кадр тела данных. Передача кадров в итоге осуществляется в потоке, кадры в потоке,头部(header)帧а такжеdata 帧можно разделить на несколько кадров фрагментов, например.dataрамка возможнаdata = data_1 + data_2 + ... + data_n.

Кроме того, если на основе二进制帧Он разделен в целом, за исключением классификации кадров сообщения. Существуют и другие вспомогательные типы фреймов, например упомянутые в комментариях: SETTINGS, PING, GOWAY, WINDOW_UPDATE и т. д. управляющие фреймы.

С последующим

представляет собой полный请求-响应процесс взаимодействия данных. Он имеет следующие характеристики:

  1. Двунаправленность: в одном и том же потоке данные могут быть отправлены и получены одновременно.
  2. Упорядочено: данные, передаваемые в потоке,二进制帧. Кадры отправляются и принимаются в потоке по порядку.
  3. Параллелизм: в потоках二进制帧Все передаются параллельно, нет необходимости ждать по очереди. Но беспорядка в данных нет, потому что каждый кадр последовательно пронумерован. В конечном итоге они будут объединены последовательной нумерацией.
  4. Создание потоков: потоки могут создаваться, использоваться или совместно использоваться клиентами или серверами в одностороннем порядке.
  5. Закрытие потоков: потоки также могут быть закрыты любой из сторон.

Изображение ниже взято из:https://blog.csdn.net/zqjflash/article/details/50179235. Он демонстрирует, как кадры в потоке有序性а также并行性. Например数据报1изdata frameОн не соединен вместе для передачи, а разделен на 2.

Суммируйте взаимосвязь между потоками и кадрами

Кадр — это единица данных в потоке. Кадр заголовка дейтаграммы может быть разделен на несколько кадров заголовка, а кадр данных может быть разделен на несколько кадров данных.

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

Мультиплексирование HTTP 2.0 на самом деле представляет собой обновленную версию длинных ссылок в HTTP 1.1.

В HTTP 1.1 после успешной связи, если связь не отключена, клиент может инициировать несколько запросов по такой ссылке упорядоченным образом и получать данные ответа, соответствующие каждому запросу. Его недостатком является то, что взаимодействие между запросом и ответом должно ожидать завершения предыдущего взаимодействия запроса, в противном случае последнее может только ждать, это线头阻塞. Вот пример:

Запрос А и запрос Б. Первым инициируется A. В это время серверная сторона получает запрос A и обрабатывает его. В то же время также отправляется запрос B. Но запрос A не был возвращен, а запрос B может только ждать.

В HTTP 2.0 после успешной ссылки, пока ссылка не отключена, клиентская сторона может быть в ссылке并发地Инициируйте несколько запросов, каждый запрос и ответ на запрос не должны ждать других запросов, задача запроса занимает много времени и не повлияет на нормальное выполнение других соединений.

Взгляните на картинку ниже:

Благодаря трем вышеупомянутым характеристикам HTTP 2.0 сыграл большую роль в оптимизации задержки передачи данных.

Итак, как в нашем коде указать использование протокола HTTP 2.0?

Проще всего использовать в коде сетевые запросы.При построении параметров запроса указывать версию протокола в заголовке http-запроса.Например,следующий пример:

http 1.1

GET /index HTTP/1.1  
Host: www.xxx.com 

Эта статья относится к:

над