Skip to content

🌐 HTTP/2

1. Что такое HTTP/2?

HTTP/2 — это вторая версия протокола передачи гипертекста (HyperText Transfer Protocol), которая была официально стандартизирована в 2015 году (RFC 7540). Он был разработан для улучшения производительности и устранения ограничений HTTP/1.x.

⚠️ Важно: HTTP/2 не является принципиально новым протоколом, а представляет собой бинарную реализацию HTTP-семантики, то есть он сохраняет методы, статус-коды, заголовки и т.д., но меняет способ их передачи.


2. История создания

HTTP/2 берёт своё начало из проекта SPDY, разработанного Google в 2009 году с целью ускорить загрузку веб-страниц. SPDY стал основой для HTTP/2, который был принят IETF (Internet Engineering Task Force) как стандарт.

Основные цели:

  • Увеличение скорости загрузки страниц.
  • Снижение задержек.
  • Поддержка многопоточной передачи.
  • Совместимость с существующими API и инфраструктурой.

3. Основные особенности HTTP/2

Особенность Описание
Бинарный протокол В отличие от текстового HTTP/1.x, HTTP/2 использует бинарный формат для обмена данными между клиентом и сервером. Это делает парсинг более эффективным.
Мультиплексирование Позволяет отправлять несколько запросов и ответов одновременно через одно TCP-соединение. Устраняет проблему "head-of-line blocking".
Сжатие заголовков Заголовки передаются в сжатом виде (HPACK), что уменьшает объём данных.
Server Push Сервер может заранее отправить ресурсы клиенту, которые тот ещё не запросил (например, CSS или JS файлы).
Приоритезация потоков Клиент может указать, какие ресурсы важнее, чтобы сервер отправлял их первыми.

4. Как работает HTTP/2?

🔁 Бинарный фреймворк

В HTTP/2 все данные передаются в виде фреймов (frames), организованных в потоки (streams). Каждый поток представляет собой независимый диалог между клиентом и сервером (запрос + ответ).

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

В HTTP/1.x каждый запрос требовал отдельного TCP-соединения (или последовательной передачи). HTTP/2 позволяет:

  • Отправлять множество запросов и получать ответы параллельно через одно соединение.
  • Избежать проблемы блокировки очереди (head-of-line blocking).

📦 HPACK — сжатие заголовков

Заголовки часто повторяются в запросах. HTTP/2 использует алгоритм HPACK, который:

  • Устраняет дублирование заголовков.
  • Представляет заголовки в виде индексов.
  • Сжимает данные с помощью Huffman-кодирования.

🚀 Server Push

Сервер может предвосхищать потребности клиента и отправлять ему ресурсы до того, как они будут запрошены. Например, если клиент запрашивает index.html, сервер может сразу же отправить style.css и script.js.


5. Требования к HTTP/2

Для использования HTTP/2 необходимо:

  • Поддержка TLS/SSL — большинство реализаций требуют HTTPS (TLS 1.2+).
  • Современные браузеры и серверы — поддерживают HTTP/2 (Chrome, Firefox, Nginx, Apache, Node.js и др.).
  • ALPN (Application-Layer Protocol Negotiation) — расширение TLS для согласования протокола.

⚠️ Примечание: HTTP/2 может работать и без шифрования (так называемый "cleartext" режим), но на практике почти все браузеры и сервисы требуют HTTPS.


6. Преимущества HTTP/2

Преимущество Описание
Быстрая загрузка страниц За счёт мультиплексирования и server push.
Меньше TCP-соединений Уменьшает нагрузку на сервер и снижает latency.
Эффективное использование полосы пропускания Благодаря сжатию заголовков и оптимизации потоков.
Лучшая масштабируемость Подходит для высоконагруженных сервисов и CDN.
Упрощённая разработка Не нужно объединять файлы (concatenation), использовать domain sharding и т.д.

7. Недостатки и ограничения

Недостаток Описание
Требует HTTPS Для большинства случаев обязательна установка SSL/TLS.
Сложнее в отладке Бинарный формат сложнее анализировать, чем текстовый HTTP/1.x.
Нужна поддержка на стороне сервера Требуется обновление программного обеспечения.
Не решает все проблемы производительности Например, TCP congestion control остаётся актуальным.

8. HTTP/2 vs HTTP/1.1

Характеристика HTTP/1.1 HTTP/2
Формат Текстовый Бинарный
Многопоточность Нет Да
Заголовки Без сжатия HPACK
Серверный пуш Нет Да
Приоритезация Нет Да
Соединения Одно соединение = один запрос Множество запросов через одно
Шифрование Необязательно Рекомендовано / требуется

9. HTTP/3 — следующий шаг

HTTP/3 — это дальнейшее развитие идеи HTTP/2, но уже на базе протокола UDP вместо TCP с использованием технологии QUIC (Quick UDP Internet Connections), разработанной Google.

Основные изменения: - Передача данных через UDP. - Устранение head-of-line blocking на уровне TCP. - Более быстрое установление соединений. - Интеграция TLS 1.3 прямо в QUIC.


10. Как проверить, используется ли HTTP/2

🔍 Через браузер

  • Откройте DevTools (F12) → Network → выберите любой запрос → во вкладке Headers найдите строку "Version" (будет указан h2 для HTTP/2).

🛠 Через командную строку

curl -I --http2 https://example.com

Если сервер поддерживает HTTP/2, вы увидите:

HTTP/2 200

🧪 С помощью OpenSSL

openssl s_client -connect example.com:443 -alpn h2

Если видите строку ALPN protocol: h2, значит, сервер поддерживает HTTP/2.


11. Настройка HTTP/2

✅ На стороне сервера

Nginx

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/privkey.pem;

    ...
}

Apache

Protocols h2 http/1.1
SSLEngine on
SSLCertificateFile "/path/to/cert.pem"
SSLCertificateKeyFile "/path/to/privkey.pem"

Node.js (HTTPS)

const https = require('https');
const fs = require('fs');

const options = {
  key: fs.readFileSync('server.key'),
  cert: fs.readFileSync('server.crt'),
};

https.createServer(options, (req, res) => {
  res.writeHead(200);
  res.end('Hello over HTTP/2!');
}).listen(443);

12. Полезные ссылки