В чем ключевые различия между протоколами HTTP/1.1 и HTTP/2?

Ответ

HTTP/2 был разработан для решения проблем производительности HTTP/1.1. Основные различия можно представить в виде таблицы:

ХарактеристикаHTTP/1.1HTTP/2
Формат передачиТекстовый. Легко читается человеком.Бинарный. Компактный и эффективный для парсинга машиной.
МультиплексированиеОтсутствует. Запросы обрабатываются последовательно. Для параллелизма браузеры открывают несколько TCP-соединений (обычно до 6).Поддерживается. Множество запросов и ответов могут передаваться одновременно в рамках одного TCP-соединения, не блокируя друг друга.
Проблема "Head-of-Line Blocking"Присутствует. Если первый запрос в очереди "завис", он блокирует все последующие в том же соединении.Решена на уровне протокола. Благодаря мультиплексированию, "зависший" запрос не мешает обработке других.
Сжатие заголовковОтсутствует (или минимальное). Заголовки передаются как обычный текст, что создаёт избыточность.HPACK. Используется эффективный алгоритм сжатия, который значительно уменьшает размер передаваемых заголовков.
Server PushОтсутствует. Клиент должен сам запросить все необходимые ресурсы (CSS, JS, картинки).Поддерживается. Сервер может "проактивно" отправлять клиенту ресурсы, которые, по его мнению, скоро понадобятся, не дожидаясь запроса.

Итог

Переход на HTTP/2 обеспечивает:

  • Ускорение загрузки страниц за счёт мультиплексирования и сжатия заголовков.
  • Снижение нагрузки на сервер благодаря использованию одного TCP-соединения на пользователя.
  • Более эффективное использование сетевых ресурсов.

Стандартная библиотека Go (net/http) имеет встроенную прозрачную поддержку HTTP/2, что упрощает его внедрение в бэкенд-приложениях.