Какие преимущества и недостатки у протокола HTTP/2?

«Какие преимущества и недостатки у протокола HTTP/2?» — вопрос из категории Сети, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

С точки зрения DevOps, HTTP/2 — это не просто обновление протокола, а инструмент для оптимизации доставки контента и снижения нагрузки на инфраструктуру.

Ключевые преимущества для инфраструктуры:

  1. Мультиплексирование запросов в одном TCP-соединении: Это решает проблему head-of-line blocking HTTP/1.1 и радикально уменьшает количество параллельных соединений от клиента к серверу. В результате снижается нагрузка на балансировщики (Nginx, HAProxy), уменьшается потребление памяти на отслеживание соединений и количество используемых портов на сервере.
  2. Сжатие заголовков HPACK: Значительно уменьшает overhead каждого запроса/ответа. Для API с большим количеством мелких запросов или для страниц с множеством ресурсов это даёт ощутимую экономию трафика и снижает задержку, особенно на каналах с высокой латентностью.
  3. Бинарный фреймовый протокол: Более эффективная для машин обработка по сравнению с текстовым HTTP/1.1, что снижает нагрузку на парсинг как на клиенте, так и на сервере/прокси.

Недостатки и операционные сложности:

  1. Обязательность TLS: Хотя спецификация не требует TLS, все основные браузеры и клиенты реализуют только HTTP/2 over TLS. Это усложняет отладку (нельзя просто telnet или curl в plain-text) и требует полноценного управления жизненным циклом сертификатов (например, через cert-manager в Kubernetes).
  2. Сложность мониторинга и отладки: Трафик зашифрован, а бинарный формат нечитаем человеком. Для анализа необходимы инструменты, понимающие ALPN (Application-Layer Protocol Negotiation), например, Wireshark с ключами TLS или специализированные прокси-отладчики. Логи сервера (Nginx/Apache) по умолчанию не показывают детали фреймов HTTP/2.
  3. Неоднозначная польза Server Push: На практике его сложно эффективно использовать. Неправильная реализация может привести к избыточной передаче данных и ухудшению производительности. Многие переходят на альтернативы, такие как предзагрузка (preload) через HTTP-заголовки Link.
  4. Проблемы со старым сетевым оборудованием и ПО: Некоторые старые балансировщики нагрузки, WAF (Web Application Firewall) или провайдеры CDN могут некорректно обрабатывать HTTP/2, что приводит к необходимости отката на HTTP/1.1 или сложной настройке.

Пример настройки и мониторинга в Nginx:

# Включение HTTP/2
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name example.com;

    ssl_certificate /etc/ssl/certs/example.com.crt;
    ssl_certificate_key /etc/ssl/private/example.com.key;

    # Мониторинг метрик HTTP/2 (требует модуль nginx-module-vts или подобный)
    # В логах можно отслеживать использование через $http2 переменную
    location /nginx_status {
        vhost_traffic_status_display;
        vhost_traffic_status_display_format html;
        allow 10.0.0.0/8; # Internal network only
        deny all;
    }
}

Для проверки работы можно использовать curl:

curl -I --http2 https://example.com
# Ожидаемый заголовок: HTTP/2 200