Основные отличия:
- Мультиплексирование (Multiplexing). HTTP/2 позволяет отправлять и получать несколько запросов и ответов через одно TCP-соединение одновременно. HTTP/1.1 требовал отдельного соединения для каждого запроса/ответа (кроме тех случаев, когда использовался механизм
pipelining, который имел ограничения).
- Заголовки (Header Compression). HTTP/2 использует сжатие заголовков с помощью алгоритма HPACK, чтобы уменьшить их размер и количество передаваемых данных. В HTTP/1.1 заголовки отправляются в текстовом виде.
- Приоритизация потоков (Stream Prioritization). В HTTP/2 клиент может указывать приоритет для различных потоков (запросов/ответов), что позволяет серверу оптимизировать порядок доставки данных. HTTP/1.1 не имеет такого механизма.
- Серверный Push (Server Push). HTTP/2 позволяет серверу отправлять ресурсы клиенту до того, как клиент их запросит, основываясь на предположении об их необходимости для отображения страницы. В HTTP/1.1 клиент должен явно запросить каждый ресурс.
- Формат фреймов (Binary Framing). HTTP/2 передает данные в бинарном формате (фреймах), что облегчает парсинг и повышает эффективность по сравнению с текстовым форматом HTTP/1.1.
Сравнение в таблице:
| Признак | HTTP/1.1 | HTTP/2 |
|---|
| Соединение | Одно соединение на запрос (без pipelining) | Одно соединение для нескольких потоков |
| Мультиплексирование | Нет (или ограничено pipelining) | Да |
| Сжатие заголовков | Нет | HРACK (бинарное сжатие) |
| Приоритизация потоков | Нет | Да |
| Серверный Push | Нет | Да |
| Формат данных | Текст | Бинарный (фреймы) |
| Head-of-Line Blocking | Присутствует | Частично решается мультиплексированием |
Пример запроса в HTTP/1.1:
http
Пример частичного представления данных в HTTP/2 (обмен фреймами более сложен и не отображается так просто):
javascript