Я провел последние несколько недель, исследуя HTTP2, преемника HTTP1.1, и я хотел бы поделиться своими выводами и мыслями в этом посте.

Давайте начнем с того, что если вы сейчас задаетесь вопросом: «Могу ли я использовать его сегодня не только для экспериментов, но и в производственной среде?»
Я отвечу: «ДА, можно!»

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

Как видно на скриншоте с сайта caniuse.com, он определенно хорошо поддерживается в последней версии основных браузеров с некоторыми оговорками.

Если вы еще не уверены, проверьте этот веб-сайт с помощью одного из браузеров, который в настоящее время поддерживает HTTP2, и посмотрите, насколько быстро загружается!
Я бы посоветовал установить расширение индикатора HTTP2 для Chrome, чтобы узнать, сколько веб-сайтов приложения или онлайн-сервисы используют этот протокол:

Еще не убедить ?! Хорошо, тогда перейдем к более глубокому анализу!

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

Это масштабное изменение резко повысит производительность вашего приложения.
Учитывая, что на данный момент браузер может одновременно загружать максимум 5 ресурсов на домен (давайте пока не будем говорить о сегментировании ресурсов ), с HTTP2 мы сможем запрашивать все ресурсы и отображать их, когда браузер завершит их загрузку, проверьте эту демонстрацию, сделанную с помощью Go Lang, для правильного сравнения двух протоколов, а также проверьте панель Сеть в инструментах разработчика Chrome или Firefox, чтобы понять, чем отличаются эти 2 протокола.

Добро

В HTTP2 действительно мало правил, которые нужно реализовать:

  • работает ТОЛЬКО с протоколом https (поэтому вам нужен действующий SSL-сертификат)
  • он обратно совместим, поэтому, если браузер или устройство, на котором работает ваше приложение, не поддерживает HTTP2, оно вернется к HTTP1.1.
  • он поставляется с отличными улучшениями производительности прямо из коробки
  • не требуется ничего делать на стороне клиента, но на стороне сервера для базовой реализации
  • несколько новых интересных функций позволят ускорить загрузку вашего веб-проекта способом, который даже невозможно представить с реализацией HTTP1.1.

Несмотря на короткий список, HTTP2 вносит существенные изменения в экосистему Интернета.
Одна из моих любимых функций - server PUSH, где сервер может передавать заголовок ссылки, определяющий, что браузер должен загрузить заранее, прежде чем начать полностью проанализировать HTML-документ.
В этом случае мы можем научить браузер загружать несколько ресурсов, таких как изображения, CSS или даже файлы javascript, до того, как движок распознает их внутри DOM, что повысит удобство работы пользователей с нашими веб-приложениями и / или игры.

Плохо

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

Отрывок из общего обзора недостатков, давайте посмотрим, что изменится с технической стороны.

Учитывая, что HTTP2 не ограничивает количество запросов, которые браузер выполняет для загрузки ресурсов, некоторые методы оптимизации наших веб-сайтов необходимо будет пересмотреть или даже удалить из нашего конвейера.
Доставка всего приложения внутри уникального javascript файл не будет иметь никаких преимуществ с HTTP2, поэтому нам нужно переместить нашу логику, загружая только то, что нам нужно, когда нам это нужно.
Зная, что загрузка больших файлов не будет проблемой, мы могли бы использовать спрайты вместо нескольких небольших изображений для обработки значков нашего веб-сайта.
Возможно, различным инструментам, таким как Grunt, Gulp или Webpack, потребуется пересмотреть свои стратегии или обновить свой плагин, чтобы обеспечить реальную ценность для этого нового конвейера проекта.

Уродливый

Реализация протокола Google Chrome!
Chrome - мой любимый браузер, и я часто использую его, в частности, когда мне нужно отладить определенный скрипт или собрать показатели определенного поведения веб-приложения.
На данный момент это единственный браузер, который требует согласования сервера HTTP2 через ALPN (согласование протокола уровня приложений), которое в основном является расширением, позволяющим уровню приложения согласовывать, какой протокол будет использоваться в соединении TLS.

Учитывая, что OpenSSL интегрирует ALPN только с версии 1.0.2, мы не сможем включить поддержку протокола HTTP2 для Chrome (начиная со сборки 51 и выше), если мы неправильно настроим наш сервер.
Например, на ОС Linux, только Ubuntu версии 16.04 имеет эту версию OpenSSL, установленную по умолчанию, для всех других основных версий Linux вы либо установите более новую версию вручную, либо вам нужно будет дождаться следующего основного выпуска ОС.

Я бы посоветовал внимательно прочитать статью, описывающую эту проблему в блоге ngnix, прежде чем вы начнете настраивать свой сервер для Chrome.

Заворачивать

HTTP2 не идеален и, вероятно, не поддерживается должным образом, но определенно может улучшить (в некоторых случаях значительно) производительность вашего веб-проекта.
Многие «крупные игроки» уже используют протоколы HTTP2 в производстве (Instagram , Twitter или Facebook, например), и результаты замечательные.

Почему бы не начать догонять будущее сегодня?

Нравится:

Нравится Загрузка…

Связанный

Первоначально опубликовано на lucamezzalira.com 7 сентября 2016 г.