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