HTTP2 VS HTTP

HTTP

Протокол HTTP/2 был официально выпущен в 2015 году, но многие веб-сайты до сих пор используют протокол http/1.1, которому 9102 года, вы уверены, что не будете его обновлять? Кто-то наверняка спрашивал, а зачем обновляться, http/1.1 хорошо работает, какие преимущества у http/2?

Давайте сначала рассмотрим недостатки http/1.1, то есть преимущества http/2.

Недостатки HTTP/1.1

  1. Блокировка в начале очереди Хотя протокол HTTP/1.1 может отправлять несколько запросов по одному и тому же соединению TCP, эти несколько запросов упорядочены, и перед ответом на следующий запрос необходимо обработать первый запрос. Если первый запрос обрабатывается очень медленно, все последующие запросы нужно будет ставить в очередь.

  2. Лимит TCP-подключения Для одного и того же доменного имени браузер может одновременно создавать от 6 до 8 TCP-соединений. Если для страницы отправляется десять запросов одновременно, то следующие 2–4 запроса могут быть продолжены только после того, как будут возвращены первые 6–8 запросов. Как это может работать?域名分片Появилась технология. Это выделение ресурсов для разных доменных имен (которые могут быть именами поддоменов второго уровня), что снимает ограничение, счастливый ~ Но злоупотребление технологией фрагментации доменных имен также нехорошо, потому что каждое TCP-соединение также очень время- потребляет (все это знают). ).

  3. В Заголовке много контента, иногда он может превышать контент ответа, и многие поля каждый раз передаются повторно.

  4. HTTP/1.1 — это передача по текстовому протоколу, который недостаточно безопасен.

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

HTTP/2

HTTP2 сравнивается с новыми функциями HTTP/1.1, включая:

  1. Мультиплексирование (MultiPlexing), одиночное длинное соединение, передача в бинарном формате, установка приоритета запроса
  2. сжатие заголовка
  3. Сервер Push

Давайте представим их один за другим.

Мультиплексирование (мультиплексирование)

HTTP/2 мультиплексирует TCP-соединения.В соединении и клиент, и сервер могут одновременно отправлять несколько запросов или ответов.Эти запросы или ответы логически делятся на множество потоков, и каждый поток может передавать несколько сообщений (сообщений), каждое сообщение состоит из нескольких минимальных бинарных кадров (Frame). И нет необходимости переписываться один за другим по порядку (но кадры одного и того же запроса или ответа должны быть по порядку, а разные могут быть не по порядку), что позволяет избежать «затора головы очереди», уменьшая количество TCP-соединения и медленный запуск TCP-соединений Проблема. http2 также может указать приоритет для потока, чем выше приоритет, тем первым ответит. Например, вы можете установить более высокий приоритет для js и css и позволить им загружаться и выполняться первыми. Приоритет также может динамически изменяться.

Схема мультиплексирования:

сжатие заголовка

HTTP не имеет состояния, и каждый запрос должен сопровождаться некоторой информацией. Но многие поля дублируются, что снижает пропускную способность и влияет на скорость. HTTP/2 использует алгоритм сжатия HPACK для информации заголовка, чтобы уменьшить размер заголовка. Конкретный метод состоит в том, чтобы сопоставить общие имена и значения в информации заголовка сообщения с индексом и поддерживать статический словарь с индексом от 1 до 61. Например, метод сопоставления: GET для 2, чтобы достичь Эффект сжатия заголовка. Однако для некоторых динамических ресурсов, таких как user-agent, необходимо поддерживать общий динамический словарь, который может динамически добавлять контент, этот динамический словарь устанавливается постепенно в процессе передачи данных, и индекс начинается с 62. Сопоставленные данные затем кодируются методом Хаффмана.

Статическая словарная таблица:

Пуш сервера

В прошлом сервер отправлял все, что клиент запрашивал у сервера, что было очень скупо. Теперь с помощью сервера push клиент запрашивает у сервера каплю воды, и сервер может вернуть весь лес. Это позволяет серверу напрямую предоставлять ресурсы, необходимые браузеру для отображения страницы, без необходимости для браузера выполнять цикл запросов после получения и анализа страницы, что экономит время загрузки. Например, когда браузер запрашивает страницу с сервера, ему нужно дождаться, пока браузер получит страницу для разбора html и обнаружит, что в ней есть ссылки на статические ресурсы, после чего браузер отправляет запрос на статические ресурсы на сервер . Но теперь сервер может напрямую возвращать страницу с требуемыми статическими ресурсами.

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

Как настроен nginx

Запустить HPPT/2 с nginx очень просто, просто добавьте http2 после настройки HTTPS.

server {
    listen 443 ssl http2;
}

Рассказав о стольких преимуществах HTTP/2, вы уверены, что не обновитесь? После обновления вы можете попрощаться с такими оптимизациями, как изображения спрайтов, сценарии слияния и таблицы стилей, встраивание ресурсов и сегментирование доменных имен. В будущем, кто бы ни спрашивал вас, какими методами оптимизировать ваш сайт, больше не говорите об этом.