HTTP/2: хорошее, плохое и уродливое (перевод)

10 октября 2016 г.

http2-traslate.png
Перевод статьи "HTTP/2: the good, the bad and the ugly" с сайта lucamezzalira.com про исследование новой версии протокола HTTP/2.

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

Давайте начнем. Главный вопрос, который мучает многих на данный момент  -  "Могу ли я реально использовать HTTP/2 сегодня не только для экспериментов , но и в производстве?". Мой ответ: "Да, вы можете!"

Где это поддерживается?

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

Поддержка браузерами Http2

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

Если это вас не убедило, то проверить этот сайт в одном из браузеров, которые в настоящее время поддерживает HTTP/2. Посмотрите, как быстро он загружается!

Я предлагаю установить расширение HTTP/2 indicator для браузера Chrome. Используя его, вы сможете увидеть, сколько веб-приложения или онлайн-сервисов используют этот протокол уже сегодня:

http/2 and SPDY indicator

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

Это огромное изменение позволяет резко увеличить производительность вашего приложения. На данный момент браузер может загрузить максимум 5 ресурсов для каждого домена одновременно. С помощью HTTP/2 мы сможем запросить все ресурсы и отобразить их, когда браузер завершает загрузку.  Попробуйте это демо для сравнения двух протоколов. Для того, чтобы понять, как 2 протокола отличаются, вы также можете проверить  панель Network в Chrome Dev Tools или Firefox Dev Tools.

Итак, каковы плюсы и минусы HTTP/2?

Хорошее

Протокол HTTP/2 имеет только несколько правил, которые должны быть выполнены для того, чтобы его реализовать.


HTTP/2 приносит существенные изменения в экосистему Интернета.

Одна из моих любимых особенностей является PUSH-сервер. Сервер может передать в заголовке ссылки, который указывают, что браузер должен загрузить в первую очередь. Он делает это, прежде чем начать анализировать полноту HTML документа. Используя это, мы можем гарантировать, что браузер загружает несколько ресурсов, таких как изображения, CSS или даже JavaScript-файлы перед тем, как распознает их внутри DOM. Это обеспечивает улучшение обслуживания для наших веб-приложений и / или игр.

Плохое

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

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

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

Доставка всего приложения внутри уникального файла JavaScript не будет иметь никакой пользы с HTTP/2. Мы можем изменить нашу логику, загружая только то, что нам нужно, когда нам это нужно.

Зная , что загрузка больших файлов не станет проблемой, мы могли бы использовать спрайты вместо нескольких маленьких изображений для обработки иконок нашего сайта. Таким инструментам, как  Gulp или Webpack, вероятно, необходимо пересмотреть свои стратегии или обновить свои плагины для того, чтобы обеспечить реальную ценность для этого нового проекта.

Уродливое

Реализация протокола в Google Chrome!

Google Chrome мой любимый браузер, и я использую его часто. В частности, я использую его, когда мне нужно отладить конкретный сценарий, или мне нужно собрать метрики определенного поведения веб-приложение.

На данный момент это единственный браузер, который требует согласования сервера HTTP/2 через ALPN. Учитывая, что OpenSSL только интегрирует ALPN  в версии 1.0.2, мы не сможем включить поддержку протокола HTTP/2 для Chrome (от сборки 51 и выше), если мы неправильно настроили наш сервер.

Например, в ОС Linux, Ubuntu только с версии 16.04 имеет нужную версию OpenSSL, установленную по умолчанию. Для всех остальных основной версии Linux вам нужно будет либо установить новую версию вручную, или вам придется ждать следующей версии операционной системы.

Я предложил бы внимательно прочитать статью , которая описывает данный "вопрос" в блоге nginx,  прежде чем проводить настройку вашего сервера для работы c Chrome.

Заканчиваем

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

Много "крупных игроков" уже используют HTTP/2 протоколы в производстве (Instagram, Twitter или Facebook, например) и результаты поразительны.

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

Оригинал статьи: https://lucamezzalira.com/2016/09/07/http2-the-good-the-bad-the-ugly/