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

Ответ

HTTP/1.1 и HTTP/2 решают одни и те же задачи, но используют принципиально разные подходы. HTTP/2 был создан для устранения недостатков HTTP/1.1, в первую очередь проблемы производительности.

Ключевые отличия:

  1. Формат передачи данных:

    • HTTP/1.1: Текстовый формат. Сообщения (заголовки и тело) передаются как обычный текст, что удобно для отладки, но неэффективно.
    • HTTP/2: Бинарный формат. Данные разбиваются на небольшие бинарные фрагменты — фреймы (frames), которые затем собираются на стороне получателя. Это более компактно и менее подвержено ошибкам парсинга.
  2. Мультиплексирование (Multiplexing):

    • HTTP/1.1: Страдает от проблемы Head-of-Line (HOL) blocking. Если один запрос на соединении выполняется долго, он блокирует все последующие. Браузеры обходят это, открывая несколько TCP-соединений (обычно до 6) к одному хосту.
    • HTTP/2: Позволяет передавать множество запросов и ответов одновременно в рамках одного TCP-соединения. Фреймы из разных потоков (streams) смешиваются, что полностью решает проблему HOL blocking на уровне приложения.
  3. Сжатие заголовков (Header Compression):

    • HTTP/1.1: Заголовки передаются в текстовом виде в каждом запросе, что создает избыточный трафик.
    • HTTP/2: Использует алгоритм HPACK для сжатия заголовков. Он хранит таблицу заголовков на стороне клиента и сервера и передает только их индексы или изменения, что значительно сокращает объем данных.
  4. Приоритезация запросов (Request Prioritization):

    • HTTP/1.1: Нет встроенного механизма приоритетов.
    • HTTP/2: Позволяет клиенту указать приоритет для каждого потока (stream), чтобы сервер мог в первую очередь отправлять более важные ресурсы (например, CSS раньше изображений).
  5. Server Push:

    • HTTP/1.1: Отсутствует. Клиент должен сам запросить каждый ресурс.
    • HTTP/2: Сервер может "проактивно" отправить ресурсы, которые, по его мнению, понадобятся клиенту (например, отправить style.css вместе с index.html), не дожидаясь запроса.

Итог: HTTP/2 значительно производительнее HTTP/1.1 за счет бинарного протокола, мультиплексирования и сжатия заголовков, что особенно заметно на сайтах с большим количеством ресурсов.