Автор: Линь Гуаньхун / Призраки под рукой
Самородки:Талант /user/178526…
Гитхаб: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 и т. д. управляющие фреймы.
С последующим流
流
представляет собой полный请求-响应
процесс взаимодействия данных. Он имеет следующие характеристики:
- Двунаправленность: в одном и том же потоке данные могут быть отправлены и получены одновременно.
- Упорядочено: данные, передаваемые в потоке,
二进制帧
. Кадры отправляются и принимаются в потоке по порядку. - Параллелизм: в потоках
二进制帧
Все передаются параллельно, нет необходимости ждать по очереди. Но беспорядка в данных нет, потому что каждый кадр последовательно пронумерован. В конечном итоге они будут объединены последовательной нумерацией. - Создание потоков: потоки могут создаваться, использоваться или совместно использоваться клиентами или серверами в одностороннем порядке.
- Закрытие потоков: потоки также могут быть закрыты любой из сторон.
Изображение ниже взято из: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
Эта статья относится к: