Что такое HTTP/2?
HTTP/2 — крупное обновление протокола HTTP (стандартизованное в RFC 7540), добавившее бинарное кадрирование, мультиплексирование, сжатие заголовков и server push для заметного повышения производительности по сравнению с HTTP/1.1.HTTP/2 и HTTP/1.1
| Возможность | HTTP/1.1 | HTTP/2 |
|---|---|---|
| Формат | Текстовый | Бинарный |
| Соединения | Несколько (6–8 на узел) | Одно мультиплексированное |
| Обработка запросов | Последовательная | Параллельные потоки |
| Сжатие заголовков | Нет | Сжатие HPACK |
| Server push | Недоступен | Поддерживается |
| Приоритизация | Нет | Приоритеты потоков |
Как работает HTTP/2
HTTP/1.1 (Head-of-Line Blocking):
Connection 1: Request A ──────────► Response A
Connection 2: Request B ──────────► Response B
Connection 3: Request C ──────────► Response C
(Multiple connections, sequential per connection)
HTTP/2 (Multiplexing):
Single Connection:
├── Stream 1: Request A ──► Response A
├── Stream 2: Request B ──► Response B
├── Stream 3: Request C ──► Response C
└── All interleaved on same connection
Ключевые возможности
Бинарный уровень кадрирования
HTTP/2 Frame Structure:
┌─────────────────────────────────────┐
│ Length (24 bits) │
├─────────────────────────────────────┤
│ Type (8 bits) │ Flags (8 bits) │
├─────────────────────────────────────┤
│ Stream Identifier (32 bits) │
├─────────────────────────────────────┤
│ Frame Payload (variable) │
└─────────────────────────────────────┘
Сжатие заголовков HPACK
| Сценарий | Заголовки HTTP/1.1 | Заголовки HTTP/2 |
|---|---|---|
| Первый запрос | ~800 байт | ~800 байт |
| Последующие запросы | ~800 байт каждый | ~20–50 байт (по индексу) |
Приоритизация потоков
Priority Tree:
Root (connection)
├── CSS (weight: 256, high priority)
├── JavaScript (weight: 220)
└── Images (weight: 110, lower priority)
Требования к серверу
| Сервер | Поддержка HTTP/2 |
|---|---|
| nginx | 1.9.5+ (поддержка HTTP/2) |
| Apache | 2.4.17+ (модуль HTTP/2) |
| Node.js | 8.4+ (встроенная поддержка) |
| IIS | Windows 10/Server 2016+ (поддержка HTTP/2) |
Преимущества производительности
- Меньшая задержка: одно соединение устраняет лишние TCP-рукопожатия
- Лучшее сжатие: размер заголовков повторных запросов уменьшается на 85–90%
- Параллельная загрузка: все ресурсы загружаются одновременно
- Server push: ресурсы можно отправить до запроса браузера
Лучшие практики
1. Включите TLS: HTTP/2 практически требует HTTPS (браузеры это обеспечивают)
2. Уменьшите фрагментацию по доменам: несколько доменов теперь ухудшают производительность
3. Прекратите объединять файлы без необходимости: мультиплексирование снижает пользу такой сборки
4. Используйте server push осторожно: отправляйте только критические ресурсы
5. Контролируйте производительность: проверяйте эффект HTTP/2 в своём сценарии
HTTP/2 заметно повышает производительность большинства сайтов за счёт более эффективного использования сетевых соединений.