HTTP / 2 против HTTP / 1

HTTP / 2 является одним из наиболее значительных изменений в работе Интернета с момента выпуска HTTP v1.1 в июне 1999 года . Новый протокол HTTP / 2 значительно ускоряет загрузку веб-страниц (на 14% быстрее, если верить нашим тестам) как на настольных, так и на мобильных устройствах.

HTTP был создан Тимом Бернерсом-Ли, чтобы обеспечить связь между сервером и клиентом. Именно это общение составляет основу Интернета.

Вскоре я расскажу о том, что такое HTTP, но сначала полезно пробежаться по краткой истории HTTP:

  • HTTP 0.9 — Time Berners-Lee выпустил первую документированную версию HTTP в 1991 году.Он состоял из одной строки, содержащей метод GET и путь к запрашиваемому документу. Ответ был таким же простым, возвращая один гипертекстовый документ без заголовков или каких-либо других метаданных.
  • HTTP 1.0 — версия 1.0 получила официальное признание в 1996 году и совпала с быстрой эволюцией спецификации HTML и «веб-браузера».Основным дополнением были «заголовки запросов» и «заголовки ответов». Кроме того, новые заголовки ответов допускают несколько типов файлов, таких как HTML, простой текст, изображения и многое другое.
  • HTTP 1.1 — версия 1.1 была выпущена в 1997 году и стала стандартом Интернета. В этой версии добавлено множество улучшений производительности, таких как соединения keepalive, механизмы кэширования, конвейеризация запросов, кодировки передачи и запросы диапазона байтов.Эта новая версия была лучше и устранила многие неясности, обнаруженные в HTTP / 1.0.
  • HTTP 2.0 — выпущен в феврале 2015 года Инженерной рабочей группой по Интернету (IETF), сфокусированной на повышении производительности HTTP. В данной статье более подробно рассматриваются основные изменения этой версии.
  • HTTP 3 — Ожидается, что новый HTTP / 3, основанный на протоколе QUIC, будет выпущен в конце 2019 года. Я кратко расскажу о HTTP / 3 в конце этой статьи.

Что такое HTTP?

HTTP обозначает протокол передачи гипертекста . Это основа Всемирной паутины и используется браузерами для загрузки веб-страниц.

Типичный пример — когда ваш браузер отправляет HTTP-запрос на веб-сервер после ввода URL-адреса. Затем команда HTTP предоставляет HTTP-ответ веб-серверу с содержимым веб-страницы.

Приведенный выше пример немного упрощает его. Давайте посмотрим на HTTP-запросы и HTTP-ответы чуть подробнее:

HTTP-запрос

HTTP-запросы обычно включают в себя следующее:

  • Стартовая строка — описывает метод HTTP (например, Get, Put или Post), цель запроса (например, URL-адрес или порт) и версию HTTP (например, HTTP / 1.1). Эта стартовая строка всегда является одной строкой.
  • Заголовки запроса — необязательный набор заголовков HTTP, определяющих запрос. Существует несколько разных типов заголовков:
    • Заголовки запроса — включают User-Agent, Accept-Type, Accept-Language.
    • Общие заголовки — включает в себя подключение.
    • Заголовки сущностей — включает в себя Content-Type или Content-Length.
  • Пустая строка — подтверждает, что все метаданные запроса были отправлены.
  • Тело (необязательно) — содержит все данные, связанные с запросом. Обычно есть две категории:
    • Тело, состоящее из одного отдельного файла, определенного заголовками объектов Content-Type и Content-Length.
    • Составное тело. Одним из примеров может быть запрос, содержащий информацию в форме HTML.

HTTP-ответы обычно включают в себя следующее:

  • Стартовая строка — обычно включает версию протокола HTTP (HTTP / 1.1), код состояния (например, 200 или 404) и текстовое описание кода состояния (например, «ОК»).
  • Заголовки ответа — необязательный набор заголовков HTTP, определяющих запрос. Существует несколько разных типов заголовков:
    • Заголовки ответа — такие как Vary и Accept-Ranges предоставляют дополнительную информацию о сервере.
    • Общие заголовки — например, Via применяются ко всему сообщению.
    • Заголовки объектов — такие как Content-Length или Last-Modified применяются к телу ответа.
  • Тело — содержит все данные, связанные с запросом. Обычно есть две категории:
    • Тело, состоящее из одного отдельного файла, определенного заголовками объектов Content-Type и Content-Length.
    • Тело, состоящее из одного единственного ресурса неизвестной длины и закодированного чанками (Transfer-Encoding установлен в Chunked).
    • Составное тело, каждая часть которого содержит различную информацию. Это не общие.

Что такое HTTP / 2?

HTTP / 2 — это следующая версия HTTP, основанная на протоколе SPDY от Google (изначально предназначенном для ускорения обслуживания веб-страниц). Он был выпущен в 2015 году Инженерной группой по Интернету (IETF).

Важно отметить, что HTTP / 2 не является заменой HTTP. Это просто расширение, в котором все основные понятия, такие как методы HTTP, коды состояния, URI и поля заголовка, остаются неизменными.

Основные отличия HTTP / 2 от HTTP / 1.x заключаются в следующем:

  • Это бинарный, а не текстовый
  • Полностью мультиплексирован, а не упорядочен и блокирован
  • Может использовать одно соединение для параллелизма
  • Это использует сжатие заголовка, чтобы уменьшить накладные расходы
  • Это позволяет Server Pushing активно добавлять ответы в кеш браузера.

Я посмотрю на каждый из них по очереди.

Двоичный протокол

Использование двоичного протокола является результатом одного из основных улучшений, внесенных в HTTP / 2. Новый уровень двоичного кадрирования относится к тому, как HTTP-сообщения передаются между клиентом (веб-браузером) и сервером.

Уровень двоичного кадрирования представил новый механизм кодирования между интерфейсом сокета и более высоким HTTP API, используемым веб-приложениями, такими как ваш браузер.

Для работы этого нового улучшенного механизма кодирования необходимо использовать двоичный протокол.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *