Чем HTTP первой версии отличается от второй
HTTP/1.1 и HTTP/2 — это две версии протокола передачи гипертекста, используемого для обмена данными между веб-клиентами и серверами. Основные отличия HTTP/2 от HTTP/1.1 связаны с производительностью, эффективностью и безопасностью. HTTP/2 — это бинарный протокол, поддерживающий мультиплексирование, сжатие заголовков, приоритизацию запросов и Server Push, что делает его значительно быстрее и эффективнее предшественника.
Как это работает
HTTP/1.1 — текстовый протокол, где каждый запрос и ответ передаются в читаемом виде. Он использует одно TCP-соединение для последовательной отправки запросов: пока не получен ответ на предыдущий запрос, следующий не отправляется. Это приводит к блокировке головы очереди (head-of-line blocking), когда медленный ресурс задерживает загрузку всех последующих.
HTTP/2 переводит обмен данными в бинарный формат, который легче разбирать компьютеру. Он позволяет мультиплексировать множество запросов и ответов в одном TCP-соединении: данные разбиваются на кадры (frames) и передаются параллельно, что устраняет блокировку головы очереди. Дополнительно HTTP/2 сжимает заголовки с помощью алгоритма HPACK, уменьшая объём повторяющихся данных.
Пример
Пример сравнения загрузки страницы с множеством ресурсов (CSS, JS, изображения):
- В HTTP/1.1 браузер открывает несколько TCP-соединений (обычно до 6) и загружает ресурсы последовательно в каждом. Если один ресурс задерживается, остальные ждут.
- В HTTP/2 браузер использует одно соединение и отправляет все запросы одновременно. Сервер может обрабатывать их параллельно и отправлять ответы в любом порядке, что значительно ускоряет загрузку.
Подводные камни
- Server Push — сервер может отправлять ресурсы клиенту до явного запроса, но это требует осторожности: избыточная отправка данных может ухудшить производительность. В современной практике Server Push часто заменяют предзагрузкой (preload) через HTML-теги.
- Бинарный протокол — сложнее для отладки, чем текстовый, но современные инструменты разработчика (например, DevTools в браузерах) умеют декодировать его.
- TLS — HTTP/2 часто используется с TLS (HTTPS), но это не обязательное требование спецификации. Однако многие браузеры поддерживают HTTP/2 только по TLS.
- Совместимость — HTTP/2 поддерживается всеми современными браузерами и серверами, но для старых клиентов требуется фолбэк на HTTP/1.1.
Когда использовать
HTTP/2 рекомендуется использовать для всех новых веб-приложений, особенно тех, где важна скорость загрузки и много ресурсов на странице. Он особенно эффективен для мобильных сетей с высокой задержкой. Однако для простых API с небольшим количеством запросов разница может быть незначительной, и HTTP/1.1 остаётся рабочим вариантом.
Коротко
- HTTP/2 — бинарный протокол, HTTP/1.1 — текстовый.
- HTTP/2 поддерживает мультиплексирование, устраняя блокировку головы очереди.
- HTTP/2 сжимает заголовки (HPACK) и позволяет приоритизацию запросов.
- Server Push в HTTP/2 позволяет серверу отправлять ресурсы заранее, но требует аккуратного применения.