48 lines
5.4 KiB
Markdown
48 lines
5.4 KiB
Markdown
|
---
|
|||
|
aliases:
|
|||
|
- HTTP/2
|
|||
|
tags:
|
|||
|
- maturity/🌱
|
|||
|
date: 2024-11-27
|
|||
|
---
|
|||
|
В 2015 году был представлен **HTTP/2**, который стал значительным шагом в развитии протокола. Его главной целью было устранение недостатков HTTP/1.1, в том числе проблемы блокировки первой строки (Head-of-Line, HOL) на уровне приложения. Это удалось достичь благодаря внедрению мультиплексирования, что позволило передавать несколько запросов одновременно через одно [[../../../../knowledge/dev/network/TCP|TCP]]-соединение, минимизируя задержки и увеличивая производительность. Однако HOL-блокировка на транспортном уровне (TCP) всё ещё осталась нерешённой.
|
|||
|
|
|||
|
![[../../meta/files/images/Pasted image 20241127183453.png]]
|
|||
|
|
|||
|
Одним из важнейших изменений стало то, что HTTP/2 перешёл с текстового на бинарный формат. Это нововведение улучшило обработку запросов и ответов, упростив разбиение данных на более мелкие фрагменты, которые называются кадрами (frames). Кроме того, появилась возможность сжимать заголовки с помощью алгоритма HPACK, что снизило объём данных, передаваемых по сети, и ускорило загрузку страниц.
|
|||
|
|
|||
|
Одной из ключевых концепций HTTP/2 стал механизм потоков (streams). Это абстракция, позволяющая мультиплексировать несколько HTTP-запросов и ответов в рамках одного TCP-соединения. Потоки работают независимо друг от друга, что предотвращает блокировку одних запросов другими, даже если они выполняются одновременно.
|
|||
|
|
|||
|
Каждое соединение в HTTP/2 содержит несколько потоков. Потоки, в свою очередь, состоят из сообщений формата “запрос-ответ”, которые делятся на кадры. Эти кадры передаются между сервером и клиентом, а специальные теги помогают идентифицировать их и собирать в правильной последовательности.
|
|||
|
|
|||
|
![[../../meta/files/images/Pasted image 20241127183553.png]]
|
|||
|
|
|||
|
HTTP/2 предоставляет возможность приоритизировать потоки. Приоритизация позволяет разработчикам назначать запросам относительный вес, чтобы более важные запросы обрабатывались первыми. Например, это может быть полезно при загрузке веб-страницы, где основные элементы, такие как HTML и CSS, должны обрабатываться быстрее, чем изображения или дополнительные скрипты.
|
|||
|
|
|||
|
**Преимущества HTTP/2**
|
|||
|
- **Мультиплексирование**: Одновременная передача нескольких запросов через одно соединение без блокировок.
|
|||
|
- **Сжатие заголовков**: Уменьшение объёма передаваемых данных благодаря алгоритму HPACK.
|
|||
|
- **Бинарный формат**: Более эффективная передача и обработка данных.
|
|||
|
- **Приоритизация**: Возможность распределять ресурсы в зависимости от важности запросов.
|
|||
|
|
|||
|
![[../../meta/files/images/Pasted image 20241127184802.png]]
|
|||
|
|
|||
|
**Как работает HTTP/2:**
|
|||
|
- Устанавливается одно TCP-соединение между сервером и клиентом.
|
|||
|
- В рамках соединения создаются потоки, каждый из которых обрабатывает отдельный запрос.
|
|||
|
- Сообщения в потоке разбиваются на кадры, чтобы их можно было передавать параллельно.
|
|||
|
- На принимающей стороне кадры собираются обратно в исходное сообщение благодаря меткам, уникальным для каждого кадра.
|
|||
|
***
|
|||
|
## Мета информация
|
|||
|
**Область**:: [[../../meta/zero/00 Сети|00 Сети]]
|
|||
|
**Родитель**:: [[HyperText Transfer Protocol|HyperText Transfer Protocol]]
|
|||
|
**Источник**::
|
|||
|
**Создана**:: [[2024-11-27]]
|
|||
|
**Автор**::
|
|||
|
### Дополнительные материалы
|
|||
|
-
|
|||
|
|
|||
|
### Дочерние заметки
|
|||
|
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|
|||
|
|