Встречается на 20% собеседований по PHP

Чем 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 позволяет серверу отправлять ресурсы заранее, но требует аккуратного применения.
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы