Разъяснение http2. Серверная поддержка: Apache и Nginx. Производительность мобильной сети

Введение

Протокол передачи гипертекста (HTTP) – простой, ограниченный и, в конечном счете, скучный протокол уровня приложений, который формирует основу Всемирной паутины. HTTP позволяет получать доступ к сетевым ресурсам, доступным в киберпространстве. А HTTP/2 – это следующая ступень данного протокола. И сегодня мы подробно рассмотрим все то, что касается протокола HTTP/2.

В этой статье мы рассмотрим следующие ключевые аспекты HTTP/2:

  • Что такое HTTP/2
  • Цель создания HTTP/2
  • Что было не так с HTTP1.1?
  • Качественные новшества HTTP/2
  • Как работает HTTP/2 с HTTPS
  • Особенности сходства между HTTP1.x, SPDY и HTTP/2
  • Основные преимущества HTTP/2
  • Поддержка и доступность браузерами HTTP/2
  • Как можно начать использовать HTTP/2

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

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

Первая документально подтвержденная версия HTTP была выпущена в 1991 году как HTTP0.9, которая позже привела к официальному внедрению HTTP1.0 в 1996 году. Версия HTTP1.1 была в 1997 году и с тех пор у нее было мало итерационных улучшений.

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

Что такое протокол?

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

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

Такая система похожа на почтовую службу. Письмо (Полезная нагрузка) вставляется в конверт (Заголовок) с адресом получателя, записанным на нем, запечатывается клеем и подтверждается почтовой маркой (Футер) перед отправкой. За исключением того, что передача цифровой информации в виде двоичной записи (0 и 1) не так проста и требует введения нового измерения в ответ на повышение технологических достижений, возникающих при взрывном росте использования Интернета.

Протокол HTTP первоначально состоял из основных команд: GET (для получения информации с сервера) и POST (для доставки запрошенной информации клиенту). Этот простой и, по-видимому, скучный набор из нескольких команд для GET-данных и POST-ответов по существу сформировал основу для построения других сетевых протоколов. Протокол является еще одним шагом для улучшения пользовательского опыта и эффективности, что требует внедрения протокола HTTP/2 для улучшения работы в Интернете.

Цель создания HTTP/2

С момента своего создания в начале 1990-х годов, HTTP подвергался нескольким крупным капитальным ремонтам. Самая последняя версия HTTP1.1 уже более 15 лет обслуживает Интернет пространство. Веб-страницы в текущую эпоху динамических обновлений информации, ресурсоемкие форматы мультимедийных материалов и чрезмерное стремление к производительности в Интернете оттеснили старые технологии протоколов в категорию устаревших. Эти тенденции требуют значительных изменений HTTP/2 для улучшения Интернета.

Основная цель исследований и разработок для новой версии HTTP базируется на трех качествах, редко связанных с одним сетевым протоколом без необходимости создания дополнительных сетевых технологий – простота, высокая производительность и надежность. Эти цели достигаются за счет внедрения возможностей, которые уменьшают задержку в обработке запросов браузером с такими методами, как мультиплексирование, сжатие, приоритизация запроса и технология сервер push. Такие механизмы, как управление потоком, обновление и обработка ошибок, работают в качестве усовершенствования протокола HTTP для разработчиков, что позволяет обеспечивать высокую производительность и устойчивость веб-приложений. Коллективная система позволяет серверам эффективно реагировать на большее количество контента, чем первоначально запрашивалось клиентами, ограничивая возможности пользователя создавать непрерывные запросы информации до тех пор, пока веб-сайт не будет полностью загружен в веб-браузер. Например, возможность Push-сервера с помощью HTTP/2 позволяет серверам отвечать полным содержимым страницы, кроме информации, которая уже доступна в кеше браузера. Эффективное сжатие файлов заголовков HTTP минимизирует накладные расходы протокола для повышения производительности при каждом запросе браузера и ответе сервера.

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

Важно отметить, что новая версия HTTP является расширением для своего предшественника и в ближайшее время не ожидается замены HTTP1.1. Реализация HTTP/2 не будет включать автоматическую поддержку всех типов шифрования, доступных с помощью HTTP1.1, но в ближайшем будущем определенно откроет двери для лучших альтернатив или дополнительных обновлений совместимости с шифрованием. Однако сравнение характеристик на уровне HTTP/2 vs HTTP1 и SPDY vs HTTP/2 определяет только последний (по дате) протокол в качестве победителя с точки зрения производительности, безопасности и надежности.

Что было не так с HTTP1.1?

HTTP1.1 ограничивался обработкой только одного запроса на одно TCP-соединение, заставляя браузеры использовать несколько TCP-соединений для одновременной обработки нескольких запросов. Однако использование слишком большого количества параллельных TCP-соединений приводит к перегрузке TCP, что приводит к несправедливой оккупации сетевых ресурсов. Веб-браузеры, использующие несколько подключений для обработки дополнительных запросов, занимают большую долю доступных сетевых ресурсов, следовательно, они снижают производительность сети для других пользователей.

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

Естественно, это вынуждало использовать такие методы, как клонирование домена, конкатенация, вложение данных и написание спрайтов. Неэффективное использование базовых TCP-соединений с HTTP1.1 также приводит к плохой приоритизации ресурсов, что приводит к возрастающему снижению производительности по мере роста веб-приложений с точки зрения сложности, функциональности и объема.

Веб значительно расширился, несмотря на устаревшие сетевые технологии на базе HTTP. Основные качества HTTP1.1, разработанные более десяти лет назад, открыли двери для злоупотреблений.

Например, взлом куки позволяет киберпреступникам повторно использовать предыдущий рабочий сеанс для компрометации паролей учетных записей, поскольку HTTP1.1 не предоставляет никаких средств для идентификации данных сеанса. Хотя аналогичные проблемы безопасности будут продолжать преследовать HTTP/2, новый протокол приложения разработан с лучшими возможностями безопасности, такими как улучшенная реализация новых функций TLS.

Качественные новшества HTTP/2

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

Двунаправленная последовательность фреймов текстового формата, передаваемых по протоколу HTTP/2, обмениваемых между сервером и клиентом, называется «потоками». Ранее итерации протокола HTTP были способны передавать только один поток одновременно с некоторой временной задержкой между каждой передачей потока.
Получение гигабайтов медиаконтента через отдельные потоки, отправленные один за другим, неэффективно и ресурсоемко. Изменения HTTP/2 помогли создать новый двоичный структурный слой для решения этих проблем.
Этот уровень позволяет клиенту и серверу распределять полезную нагрузку HTTP на небольшую, независимую и управляемую чередующуюся последовательность фреймов. Затем эта информация снова собирается на другом конце.

Форматы двоичных фреймов позволяют осуществлять обмен несколькими одновременными открытыми независимыми двунаправленными последовательностями без задержки между последовательными потоками.

Этот подход представляет собой ряд преимуществ HTTP/2, описанных ниже:

  • Запросы и ответ параллельного мультиплексирования не блокируют друг друга.
  • Единственное TCP-соединение используется для обеспечения эффективного использования сетевых ресурсов, несмотря на передачу нескольких потоков данных.
  • Нет необходимости применять ненужные оптимизационные хаки, такие как спрайты изображений, конкатенация и дублирование доменов, — что может негативно влиять на другие области производительности сети.
  • Снижение задержек, более быстрая производительность Интернета, лучшее ранжирование в поисковых системах.
  • Сокращение OpEx (операционные затраты) и CapEx (капитальные расходы) при запуске сетевых и IT-ресурсов.

Благодаря этой возможности пакеты данных из нескольких потоков по существу смешиваются и передаются по одному TCP-соединению. Затем эти пакеты разбиваются на принимающей стороне и представляются в виде отдельных потоков данных. Передача нескольких параллельных запросов одновременно с использованием HTTP версии 1.1 или более ранней версии требовала нескольких TCP-соединений, что по своей сути затрудняет общую производительность сети, несмотря на более высокую передачу потоков данных. HTTP/2 обеспечивает более низкую задержку, более высокую производительность, лучшие рейтинги SEO.

Сервер Push

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

Клиент (браузер) помещает отправленный ресурс Y в свой кеш для будущего использования. Этот механизм сохраняет обратную связь с запросом и уменьшает задержку сети. Server Push был первоначально представлен в протоколе SPDY от Google. Идентификаторы потоков, содержащие псевдо-заголовки, такие как:path позволяют серверу инициировать Push для информации, которая должна быть кэшируемой. Клиент должен явно разрешить серверу использовать кэшируемые ресурсы с помощью HTTP/2 или завершать отправляемые потоки с помощью определенного идентификатора потока.

Другие изменения HTTP/2, такие как Server Push, проактивно обновляют или аннулируют кеш клиента и также называются «Cache Push». Долгосрочные последствия зависят от способности серверов идентифицировать возможные push-ные ресурсы, которые клиенту фактически не нужны.
Реализация HTTP/2 обеспечивает значительную производительность для перенаправленных ресурсов, а также другие преимущества HTTP/2, описанные ниже:

  • Клиент сохраняет вложенные ресурсы в кеш.
  • Клиент может повторно использовать эти кэшированные ресурсы на разных страницах.
  • Сервер может мультиплексировать перенаправленные ресурсы вместе с первоначально запрошенной информацией в рамках одного и того же TCP-соединения.
  • Сервер может назначать приоритеты перенаправленным ресурсам –ключевому отличию в производительности по протоколу HTTP/2 и HTTP1.
  • Клиент может отказаться от перенаправленных ресурсов для поддержания эффективного хранилища кэшированных ресурсов или полностью отключить Server Push.
  • Клиент также может одновременно ограничить количество одновременных мультиплексированных потоков.

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

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

Бинарные протоколы

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

Хотя, вероятно, потребуется больше усилий для чтения бинарных текстовых команд по сравнению с текстовыми командами, для сети проще создавать и анализировать фреймы, доступные в двоичном формате. Фактическая семантика остается неизменной.

Браузеры, использующие реализацию HTTP/2, будут преобразовывать одни и те же текстовые команды в двоичные файлы перед передачей по сети. Бинарный структурный слой не обратно совместим с клиентами и серверами HTTP1.x и является ключевым фактором, обеспечивающим значительные преимущества по производительности по сравнению с SPDY и HTTP1.x. Использование двоичных команд позволяют обеспечивать ключевые бизнес-преимущества для интернет-компаний и онлайн-бизнеса:

  • Низкие накладные расходы при анализе данных
  • Меньше подвержены ошибкам
  • Более легкое сетевое пространство
  • Эффективное использование сетевых ресурсов
  • Устранение проблем безопасности, связанных с текстовой природой HTTP1.x, таких как атаки на перехват ответа
  • Другие возможности HTTP/2, включая сжатие, мультиплексирование, определение приоритетов, управление потоком и эффективная обработка TLS.
  • Компактное представление команд для упрощения обработки и реализации.
  • Эффективное и надежное с точки зрения обработки данных между клиентом и сервером.
  • Снижение задержек сети и повышение пропускной способности.

Оптимизация потока HTTP/2

Реализация позволяет клиенту предоставлять предпочтение конкретным потокам данных. Хотя сервер не обязан следовать этим инструкциям от клиента, этот механизм позволяет серверу оптимизировать распределение сетевых ресурсов на основе требований конечного пользователя. Приоритизация потоков работает с зависимостями и весом, назначенными каждому потоку. Хотя все потоки по своей сути зависят друг от друга, за исключением того, что зависимым потокам также назначается вес между 1 и 256. Детали для механизмов приоритизации потока все еще обсуждаются.

Однако в реальном мире сервер редко контролирует ресурсы, такие как CPU и подключение к базам данных. Сама сложность реализации не позволяет серверам выполнять запросы приоритета потока. Исследования и разработки в этой области особенно важны для долгосрочного успеха HTTP/2, поскольку протокол способен обрабатывать несколько потоков данных с помощью одного TCP-соединения. Эта возможность может привести к одновременному приходу запросов сервера, которые фактически отличаются с точки зрения приоритета с позиции конечного пользователя. Удержание запросов обработки потока данных на случайной основе подрывает эффективность и опыт конечного пользователя, обещанный изменениями HTTP/2.

В то же время интеллектуальный и широко принятый механизм приоритизации потока представляет преимущества HTTP/2, объясняемые следующим образом:

  • Эффективное использование сетевых ресурсов.
  • Сокращение времени на доставку первичных запросов контента.
  • Улучшенная скорость загрузки страниц и конечный пользовательский интерфейс.
  • Оптимизированная передача данных между клиентом и сервером.
  • Снижение негативного влияния проблем с задержкой в ​​сети.

Сжатие заголовка с отслеживанием состояния

Обеспечение высокого качества пользовательского опыта нужно сайтам, которые насищены контентом и графикой.

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

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

Реализация HTTP/2 решает эти проблемы с возможностью сжатия большого количества избыточных фреймов заголовка. Она использует спецификацию HPACK как простой и безопасный подход к сжатию заголовков. И клиент и сервер поддерживают список заголовков, используемых в предыдущих запросах клиент-сервер.

HPACK сжимает индивидуальное значение каждого заголовка до его передачи на сервер, а затем просматривает закодированную информацию в списке ранее перенесенных значений заголовка для восстановления полной информации заголовка. Сжатие заголовка HPACK для реализации протокола HTTP/2 дает огромные преимущества в производительности, включая некоторые преимущества HTTP/2, описанные ниже:

  • Эффективная приоритизация потока.
  • Эффективное использование механизмов мультиплексирования.
  • Сокращение накладных ресурсов – одна из самых ранних проблем в дебатах по HTTP/2 vs HTTP1 и HTTP/2 vs
  • Кодирует большие заголовки, а также обычно используемые заголовки, что исключает необходимость отправки всего фрейма заголовка. Индивидуальный размер передачи каждого потока данных быстро сокращается.
  • Не уязвим для атак безопасности, таких как CRIME, использующих потоки данных со сжатыми заголовками.

Сходство HTTP/2 с HTTP1.x и SPDY

Основная семантика HTTP, включая коды состояния HTTP, URI, методологии и файлы заголовков остаются такими же в последней версии HTTP/2. HTTP/2 основан на SPDY, альтернативе Google для HTTP1.x. Реальные различия заключаются в механизмах, используемых для обработки запросов клиент-сервер. Следующая таблица идентифицирует несколько областей сходства и улучшений среди HTTP1.x, SPDY и HTTP/2:

HTTP1.x SPDY HTTP2
SSL требуется SSL не требуется, но рекомендуется
Медленное шифрование Быстрое шифрование Даже более быстрое шифрование
Один клиент-серверный запрос на одно TCP-соединение Несколько запросов клиент-сервер на одно TCP-соединение. Происходит на одном хосте одновременно Мультиплексирование с несколькими хостами. Происходит на нескольких хостах одновременно
Нет сжатия заголовка Включено сжатие заголовка Сжатие заголовков с использованием улучшенных алгоритмов, которые повышают производительность, а также безопасность
Нет приоритета потока Приоритет потока включен Улучшены механизмы определения приоритетов потока

Как работает HTTP/2 с HTTPS

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

Поддержка браузерами HTTP/2 включает в себя HTTPS-шифрование и фактически дополняет общую производительность безопасности развертываний HTTPS. Такие функции, как меньшее количество рукопожатий TLS, низкое потребление ресурсов на стороне клиента и сервера и улучшенные возможности повторного использования существующих веб-сеансов при устранении уязвимостей, связанных с HTTP1.x, представляют собой HTTP/2 в качестве ключевого средства защиты цифровой связи в уязвимых сетевых средах.

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

Для включения HTTPS нужно: купить, активировать и установить сертификат безопасности на сервер и, наконец, обновление контента веб-сайта для использования HTTPS. Детальнее по установке HTTPS читайте .

Основные преимущества HTTP/2

Интернет-индустрии пришлось заменить стареющий HTTP1.x альтернативными перспективными улучшениями для обычного пользователя. Переход от HTTP1.x к HTTP/2 почти полностью основан на максимизации потенциала технологических достижений для удовлетворения этих ожиданий.

С точки зрения интернет-бизнеса и интернет-потребителей, Интернет становится все медленнее, поскольку он заполняется растущими объемами нерелевантного мультимедийного контента.

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

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

Веб-производительность

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

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

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

Производительность мобильных веб-сайтов

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

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

Дешевый Интернет

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

Экспансивный охват

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

Улучшенный мобильный опыт

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

Улучшение использования технологий

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

Безопасность

Преимущества HTTP/2 выходят за рамки производительности, поскольку алгоритм HPACK позволяет HTTP/2 обойти распространенные угрозы безопасности, ориентированные на текстовые протоколы прикладного уровня. HTTP/2 содержит команды в двоичном формате и разрешает сжатие метаданных заголовка HTTP в соответствии с подходом «Безопасность по умолчанию» для защиты конфиденциальных данных, передаваемых между клиентами и серверами. Протокол также может похвастаться полной поддержкой шифрования и требует улучшенной версии Transport Layer Security (TLS1.2) для лучшей защиты данных.

Новаторство

HTTP/2 воплощает инновации и концепцию высокопроизводительной сети. HTTP/2 подкрепляет кибер-мир, как мы его знаем сегодня, а изменения HTTP/2 в основном основаны на протоколе SPDY от Google, который совершил гигантский скачок по сравнению со старыми версиями HTTP1.x и почти полностью заменит SPDY, а также все предыдущие HTTP-итерации в ближайшем будущем. HTTP/2 – это самое большое, самое инновационное изменение в семействе протоколов с 1999 года.

Преимущество HTTP/2 для SEO

SEO-маркетинг находится где-то между искусством и наукой. Интернет-компании должны соответствующим образом развивать свою маркетинговую тактику. Более разумные инвестиции в виде внедрения тщательно разработанных веб-сайтов, которые не просто оптимизированы для скорости, но созданы для обеспечения превосходной производительности, безопасности и пользовательского опыта с нуля. Эти атрибуты позволяют пользователям находить наиболее релевантные ответы при поисковых запросах.

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

Пользователям Интернета не нужно беспокоиться о настройке своих настольных и мобильных веб-браузеров для поддержки HTTP/2. Google Chrome и Firefox уже много лет поддерживают эту технологию, и Apple добавила поддержку в браузер Safari в 2014 году. Для Internet Explorer нужна версия ОС не ниже Windows 8 для поддержки последнего протокола.

Крупные мобильные веб-браузеры, в том числе Android с Android-браузером, Chrome для Android и iOS, а также Safari в iOS 8 и выше поддерживают HTTP/2 для мобильного доступа в Интернет. Пользователям Интернета рекомендуется установить последние стабильные версии мобильных и настольных веб-браузеров, чтобы получить максимальную производительность и преимущества безопасности протокола приложения, как показано в тестах HTTP/2.

Поддержка веб-сервера ми : Apache и Nginx

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

Серверы Nginx, составляющие 66 процентов всех активных веб-серверов, имеют встроенную поддержку HTTP/2, тогда как серверы Apache используют модуль mod_spdy для поддержки браузерами HTTP/2. Модуль был разработан компанией Google для поддержки функций SPDY, таких как мультиплексирование и сжатие заголовков для серверов Apache 2.2.

Как начать использовать HTTP/2

Следуйте этим простым шагам, чтобы настроить HTTP/2 для своего сайта:

  1. Убедитесь, что HTTPS включен на сайте:
  • Приобретите сертификат SSL или TLS у доверенного поставщика.
  • Активируйте сертификат безопасности.
  • Установите сертификат.
  • Обновите веб-сайт, чтобы включить протокол HTTPS.
  1. Убедитесь, что базовая сетевая инфраструктура, включая серверное программное обеспечение, поддерживает HTTP/2. Серверы Nginx поддерживают HTTP/2 изначально, в то время как Apache добавила встроенную поддержку в октябре 2015 года (в версии 2.4), что означает, что серверам Apache могут потребоваться дополнительные модули для обмена данными для поддержки браузерами HTTP/2.
  2. Обновите, настройте и протестируйте свои серверы для поддержки HTTP/2. Свяжитесь со службой поддержки вашего хостинга, чтобы убедиться, что HTTP/2 готов для вашего сайта.
  3. Используйте этот онлайн-инструмент , чтобы проверить, правильно ли вы настроили HTTP/2.

HTTP/2 - новая версия сетевого протокола HTTP, основанная на разработанном компанией Google протоколе SPDY. Предыдущая версия протокола HTTP/1.1 принята в далеком 1999 году, когда сайты очень сильно отличались от современных. В наше время веб-технологии развиваются слишком стремительно, поэтому новая версия протокола - очень важное и нужное нововведение, направленное на повышение безопасности, эффективности и скорости работы сайтов.

Ключевые особенности HTTP/2

  • Мультиплексирование. В HTTP/1.1 для каждого запроса требуется устанавливать отдельное TCP-соединение, одновременное количество которых ограничено. Мультиплексирование в HTTP/2 позволяет браузеру выполнять множество запросов в рамках одного TCP-соединения. Таким образом, статические элементы загружаются параллельно, запросы и ответы не блокируют друг друга. Как результат, быстрая загрузка и визуализация страницы сайта.
  • Сжатие HTTP-заголовков. При отправке запросов клиентом и ответов сервером передаются HTTP-заголовки, которые содержат вспомогательную информацию. Если загружаемая страница содержит большое количество элементов - все заголовки будут занимать приличный объем. В HTTP/2 заголовки передаются в сжатом виде, что позволяет существенно сократить объем информации, которой обмениваются сервер и клиент. Кроме того, для сжатия используется специальный алгоритм HPACK, который снижает риски к атакам по перехвату информации.
  • Приоритизация. Назначение приоритетов запросам позволяет обеспечить визуальную скорость загрузки страницы для пользователя. Например, браузер может попросить сервер отправить в первую очередь файлы CSS, так как они очень важны для определения вида страницы.
  • Server Push. При использовании HTTP/1.1 сервер отправляет в ответ на запрос HTML-код и ожидает от браузера запросов на элементы страницы. В HTTP/2 добавлена функция Server Push, которая позволяет серверу сразу отправлять дополнительные элементы, которые могут понадобится браузеру в будущем.
  • Бинарность. Протокол HTTP/2 является бинарным, в то время как HTTP/1.1 – текстовый. Поэтому он более эффективен для анализа и обработки сервером, более компактный при передаче и меньше подвержен ошибкам.

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

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

Важно! Протокол HTTP/2 не требует обязательного шифрования, однако разработчики браузеров приняли решение реализовать работу с новым протоколом только через TLS (HTTPS). Поэтому наличие установленного (коммерческого или бесплатного) является обязательным условием для работы по протоколу HTTP/2.

Ниже наглядно представлены версии браузеров, для которых реализована поддержка протокола HTTP/2 (выделены зеленым фоном). В Internet Explorer 11 новый протокол поддерживается только в Windows 10, в Safari - OSX 10.11 и выше.

Сегодня все больше посетителей используют для доступа к сайтам мобильные устройства. Возможности HTTP/2 хорошо работают для уменьшения задержек при доступе к ресурсам в мобильных сетях передачи данных, в которых пропускная способность зависит от разных факторов, а качество связи не всегда приемлемо. Учитывая поддержку HTTP/2 всеми основными мобильными браузерами преимущества нового протокола на мобильных устройствах особенно очевидны.

HTTP/2 и поисковая оптимизация (SEO)

Несомненно, многих владельцев веб-сайтов волнует вопрос оптимизации своих ресурсов для поисковых систем. Одним из важных факторов ранжирования для поисковых систем является скорость загрузки сайтов. Поэтому сайты, которые работают по протоколу HTTP/2, получат бонус в ранжировании именно за скорость загрузки. Отметим, что теперь еще выгоднее переходить на HTTPS, так как это позволит дополнительно получить бонус в ранжировании поисковых систем и за использование HTTPS.

HTTP/2 и оптимизация сайтов

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

  • Объединение изображений в спрайты. В HTTP/1.1 объединение небольших изображений в один спрайт эффективно, так как требуется всего одно HTTP-соединение и не возникает очереди запросов. Но если на странице используется всего одно изображение - нужно загрузить весь спрайт. В HTTP/2 с мультиплексированием очередь запросов больше не является проблемой, поэтому во многих случаях оптимально загружать много мелких изображений, которые используются на странице. Однако, в некоторых случаях объединение изображений в один спрайт может быть полезным, так как улучшается сжатие и уменьшается объем загрузки, особенно если все изображения используются на странице.
  • Встраивание изображений с помощью data URI. Еще один способ решения проблемы с множественными запросами – встраивание изображений в CSS с помощью data URI. За счет этого может существенно увеличиваться размер файла со стилями, но требуется меньше HTTP-соединений. В HTTP/2 такой подход может быть полезным, но вряд ли будет помогать улучшению производительности.
  • Объединение CSS и JavaScript. Еще один способ ограничения количества HTTP-соединений. При таком подходе все файлы css/js объединяются в один большой файл. А значит при загрузке одной страницы загружаются сразу все таблицы стилей и js-код, даже если они не используются на текущей странице. Кроме того, браузером кэшируется сразу весь общий файл и небольшое изменение кода потребует повторной загрузки всего файла. С мультиплексированием в HTTP/2 загрузка множества мелких файлов не является проблемой, поэтому распределение файлов css/js только на нужные страницы будет намного эффективнее и поспособствует увеличению скорости загрузки сайта.
  • Доменный шардинг . Этот способ заключается в загрузке статических ресурсов с разных доменов или поддоменов основного домена и актуален только для HTTP/1.1. Причина та же - ограничение на количество параллельных HTTP-соединений. В HTTP/2 такой подход негативно влияет на производительность за счет открытия дополнительных TCP-соединений и препятствия в обработке приоритетов ресурсов.

Как проверить, поддерживает ли сайт протокол HTTP/2

  • Онлайн-сервисы.

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

  • Расширения для браузеров.

Для браузеров и есть расширения, которые иконкой-индикатором оповещают о том, что сайт открыт по протоколу HTTP/2.

  • Инструменты разработчика в браузере.

Рассмотрим для примера просмотр протокола в инструментах разработчика в браузерах Chrome и Firefox.

  1. Открываем инструменты разработчика: нажимаем правой кнопкой мыши на странице и выбираем в контекстном меню «Просмотреть код» или нажимаем Ctrl+Shift+I.
  2. Переходим на вкладку «Network» и нажимаем кнопку F5 для обновления страницы
  3. Нажимаем правой кнопкой мыши на названии какого-либо столбца и выбираем в контекстном меню «Protocol», добавив тем самым соответствующий столбец.

Для каждого ресурса в столбце «Protocol» отображается протокол, по которому он загружен:

Firefox:

  1. Открываем инструменты разработчика: нажимаем правой кнопкой мыши на странице и выбираем в контекстном меню «Исследовать элемент» или нажимаем Ctrl+Shift+I.
  2. Переходим на вкладку «Сеть» и нажимаем кнопку F5 для обновления страницы
  3. Нажимаем правой кнопкой мыши на названии какого-либо столбца и выбираем в контекстном меню «Протокол», добавив тем самым соответствующий столбец.

Для каждого ресурса в столбце «Протокол» отображается протокол, по которому он загружен:

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

Есть два типа веб разработчиков- те кто уже используют НТТР/2 для увеличения производительности сайта и те кто готовы использовать HTTP/2 в своих будущих проектах. Если вы ещё не слышали про HTTP/2, то вам нужно многое наверстать в этом вопросе. Давайте приступим.

Итак, что же такое HTTP/2. Это всего лишь маркетинговое словечко или действительно что-то стоящее внимания?

HTTP/2 - это последняя версия знаменитого сетевого протокола HTTP- Hypertext Transfer Protocol , который используется во Всемирной паутине. Этот протокол даёт возможность разделить текстовую и мультимедийную информацию, используя так называемые веб линки между неподключенными узлами, такими как браузер и сервер. Например, ваш браузер использует этот протокол для загрузки данной статьи. Но без протокола HTTP не было бы Интернета!

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

СЕТЕВОЙ ПРОТОКОЛ HTTP

НТТР использует технологию “клиент-сервер”. Это значит, что ваш браузер (Firefox, Chrome и т.д.) является “клиентом”, а наш блог работает на сервере хостинга. Например, эта статья может быть идентифицирована и загружена с помощью URL - Uniform Resource Locator (уникальный определитель ресурса). Если вы открываете URL этой статьи, ваш клиент делает НТТР запрос на сервер и получает информацию в HTML формате. Как только трансфер данных (на транспортном уровне по протоколу ТСР) будет проведён, ваш браузер отобразит полученный ответ в HTML коде для вывода на экран текста, который вы сейчас читаете.

Исторический факт: Термин «hypertext» впервые был использован Тэдом Нельсоном в 1965 год (проект Xanadu). HTTP и HTML были созданы Тимом Бернерс-Ли и его командой в CERN в 1989 году. Между прочим, первый сайт был опубликован 6 августа 1991 года.

Сетевой протокол поддерживает сессии и аутентификацию. Сессия это открытая последовательность транзакций запрос-ответ по ТСР соединению на определённый порт. Порт 80 используется для НТТР и 443 для НТТРS соединений. HTTPS это HTTP поверх SSL/TLS , который обозначает, что сквозное соединение создано через зашифрованный канал с помощью криптографического протокола Transport Layer Security (TLS) .

HTTP/1.0 и HTTP/1.1

Перед тем как HTTP/2 был представлен как стандарт, предыдущий протокол HTTP/1.1 был официальным стандартом. HTTP/1.1 - это усовершенствованная версия оригинальной HTTP/1.0 версии, официально представленной в 1996 году. Самая первая версия HTTP/1.1 была представлена в 1997 году, а улучшенная и обновлённая его версия была выпущена в 1999 года и повторно в 2014. Главное отличие между этими двумя устаревшими стандартами в поддержке множественных подключений в одном запросе.

HTTP/1.0 поддерживает лишь одно подключение за один запрос ресурса, тогда как HTTP/1.1 позволяет использовать то же самое подключение несколько раз, т.е. устанавливается постоянное подключение. Это даёт меньшую задержку и помогает загрузить современный сайт быстрее. Задержка - это время между запросом (причиной) и ответом (результатом). Этот параметр был улучшен в дальнейшем в HTTP/2 , но поясним главные преимущества нового стандарта позже.

ПОДРОБНЕЕ О МЕТОДАХ ЗАПРОСА HTTP

Чуть выше мы рассказали про запросы к серверу. HTTP определяет несколько методов запроса, которые могут быть использованы для разных целей и действий на определённом ресурсе. Наиболее распространённые методы это GET и POST, которые должны быть вам знакомы.

Когда вы вызываете URL, кликая по обычной ссылке, то ваш браузер создаёт GET запрос. Вы можете видеть GET параметры прямо в URL , например?id=42 . В этом примере переменная GET это идентификатор со значением 42. Когда вы подписываетесь на услугу вводя свои данные в форме и кликаете на кнопку подтверждения, то ваш клиент выполнит POST запрос. Кроме этих методов НТТР поддерживает несколько других методов, которые обычно не используются браузером во время интернет-сёрфинга. Вот эти методы:

  • HEAD (подобное методу GET, но без тела ответа),
  • PUT (меняет или создаёт ресурс),
  • DELETE (удаляет ресурс),
  • TRACE (эхо-запрос),
  • OPTIONS (возвращает поддерживаемые HTTP методы),
  • CONNECT (преобразовывает запросы в TCP/IP туннель),
  • PATCH (применяет изменения для ресурса).

HTTP ОТВЕТЫ И КОДЫ СТАТУСОВ HTTP

Давайте сделаем краткий обзор ответов на запросы. Ответ сервера после запроса содержит не только тело ответа и HTML код для вывода загруженной страницы, но также и поля заголовков ответа. Эти поля содержат важную информацию и параметры о HTTP транзакции в установленном соединении, например используемый алгоритм шифрования или механизм кеширования. Для полноты описания нужно отметить, что эти важные параметры также отсылаются в полях заголовков запроса.

Первая строка HTTP ответа всегда содержит так называемый код статуса, который помогает клиенту правильно обработать ответ. Кто не знает печально известное сообщение “Ошибка сервера 500” . Именно этот статус код 500 был отослан сервером в браузер из-за внутренних проблем сервера. Есть несколько главных категорий, которые определяются по первой цифре:

  • 1 – информационный,
  • 2 – успешный,
  • 3 – переадресация,
  • 4 – клиентская ошибка,
  • 5 – серверная ошибка.

ПРЕИМУЩЕСТВА HTTP/2

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

Сервер может передавать данные клиенту даже если они ещё не были запрошены браузером, но необходимы браузеру для полного отображения страницы. Дополнительные запросы могут быть мультиплексированы (запросы или ответы комбинируются) и переданы конвейерным способом (множество запросов без ожидания получения соответствующих ответов) при одном ТСР соединении. Эти улучшения уменьшают задержку и ведут к лучшей скорости загрузки страницы.
Итак, что необходимо, чтобы начать пользоваться преимуществами HTTP/2 ? Оба, клиент и сервер, должны понимать и поддерживать этот стандарт. Все популярные современные браузеры уже имеют встроенную поддержку HTTP/2 на данный момент. Ваш браузер будет автоматически загружать веб-страницы через HTTP/2 если сервер поддерживает его. (то есть, если он включен).

КАК МНЕ АКТИВИРОВАТЬ HTTP/2 НА СВОЕМ СЕРВЕРЕ? ИСПОЛЬЗУЙТЕ PLESK!

Настройка HTTP/2 - это действительно просто! Как всегда, Plesk сделал всю трудную работу за вас, пока вы отдыхали и занимались своим бизнесом. Если у вас уже есть Plesk на вашем сервере, то вам достаточно сделать несколько кликов, чтобы включить поддержку современного, быстрого сетевого стандарта.

Команда Plesk создала расширение безопасности Security Advisor , с помощью которого можно активировать HTTP/2 , а также активировать сертификат SSL и поддержку HTTPS в 1 клик в WordPress. Откройте каталог расширений Plesk и установите Security Advisor. Расширение абсолютно бесплатное и не только защитит ваш сайт, но и ускорит!

«… мы не меняем весь HTTP - методы, коды статусов и большинство заголовков остаются теми же. Мы лишь переработали его с точки зрения повышения эффективности использования, чтобы он был более щадящим по отношению к интернету…»

Важно отметить, что новая версия HTTP идёт в качестве расширения для своего предшественника, и вряд ли в обозримом будущем заменит HTTP 1.1. Реализация HTTP/2 не подразумевает автоматической поддержки всех типов шифрования, доступных в HTTP 1.1, но определённо поощряет использование более интересных альтернатив, или дополнительное обновление совместимости шифрования в ближайшем будущем. Тем не менее, в сравнениях «HTTP/2 против HTTP 1» и «SPDY против HTTP/2» герой этой статьи выходит победителем по производительности, безопасности и надёжности.

Чем был плох HTTP 1.1?

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

Но параллельное использование многочисленных соединений приводит к перегрузке TCP, следовательно, к несправедливой монополизации сетевых ресурсов. Браузеры, использующие многочисленные соединения для обработки дополнительных запросов, занимают львиную долю доступных сетевых ресурсов, что приводит к снижению сетевой производительности для других пользователей.

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

Сетевой индустрии фактически пришлось хакнуть эти ограничения с помощью таких методик, как доменный шардинг (domain sharding), конкатенация, встраивание и спрайтинг (spriting) данных, а также ряд других. Неэффективное использование HTTP 1.1 базовых TCP-соединений является причиной плохой приоритезации ресурсов, и в результате - экспоненциальной деградации производительности по мере роста сложности, функциональности и объёма веб-приложений.

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

Например, с помощью Cookie Hack злоумышленники могут повторно использовать предыдущую рабочую сессию для получения несанкционированного доступа к паролю пользователя. А причина в том, что HTTP 1.1 не предоставляет инструментов конечного подтверждения подлинности. Понимая, что в HTTP/2 будут искать аналогичные лазейки, его разработчики постарались повысить безопасность протокола с помощью улучшенной реализации новых возможностей TLS .

Особенности HTTP/2

Мультиплексированные потоки

Пересылаемая через HTTP/2 в обе стороны последовательность текстовых фреймов, которыми обмениваются между собой клиент и сервер, называется “потоком”. В ранних версиях HTTP можно было транслировать только по одному потоку за раз, с небольшой задержкой между разными потоками. Передавать таким способом большие объёмы медиа-контента было слишком неэффективно и ресурсозатратно. Для решение этой проблемы в HTTP/2 применяется новый бинарный слой фреймов.

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

Бинарные фреймовые форматы позволяют одновременно обмениваться многочисленными, независимыми последовательностями, передаваемыми в обе стороны, без какой-либо задержки между потоками. Этот подход даёт массу преимуществ:

  • Параллельные мультиплексированные запросы и ответы не блокируют друг друга.
  • Несмотря на передачу многочисленных потоков данных, для наибольшей эффективности использования сетевых ресурсов используется одиночное TCP-соединение.
  • Больше не нужно применять оптимизационные хаки , наподобие спрайтов, конкатенации, фрагментирования доменов и прочих, которые негативно сказываются на других сферах сетевой производительности.
  • Задержки ниже, производительность сети выше, лучше ранжирование поисковыми системами.
  • В сети и IT-ресурсах уменьшаются операционные расходы и капитальные вложения.
Благодаря описанной возможности, пакеты данных из разных потоков вперемешку передаются через единственное TCP-соединение. В конечной точке эти пакеты затем разделяются и представляются в виде отдельных потоков данных. В HTTP 1.1 и более ранних версиях для параллельной передачи многочисленных запросов пришлось бы устанавливать такое же количество TCP-соединений, что является узким местом с точки зрения общей производительности сети, несмотря на быструю передачу большего количества потоков данных.

Отправка данных по инициативе сервера (Server Push)

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

Полученный от сервера ресурс Y кэшируется на клиенте для будущего использования. Этот механизм позволяет экономить циклы «запрос-ответ» и снижает сетевую задержку. Изначально Server Push появился в протоколе SPDY. Идентификаторы потоков, содержащие псевдозаголовки наподобие:path , инициируют передачу сервером дополнительной информации, которая должна быть закэширована. Клиент должен либо явным образом позволить серверу передавать себе кэшируемые ресурсы посредством HTTP/2, либо прервать инициированные потоки, имеющие специальный идентификатор.

Другие возможности HTTP/2, известные как Cache Push, позволяют с упреждением обновлять или аннулировать кэш на клиенте. При этом сервер способен определять ресурсы, которые могут понадобиться клиенту, которые он на самом деле не запрашивал.

Реализация HTTP/2 демонстрирует высокую производительность при работе с инициативно передаваемыми ресурсами:

  • Инициативно передаваемые ресурсы сохраняются в кэше клиента.
  • Клиент может многократно использовать эти ресурсы на разных страницах.
  • Сервер может мультиплексировать инициативно передаваемые ресурсы вместе с запрошенной информацией в рамках того же TCP-соединения.
  • Сервер может приоритезировать инициативно передаваемые ресурсы. Это ключевое отличие с точки зрения производительности между HTTP/2 и HTTP 1.
  • Клиент может отклонить инициативно передаваемые ресурсы для поддержания эффективности репозитория, или может вообще отключить функцию Server Push.
  • Клиент может также ограничивать количество одновременно мультиплексированных потоков с инициативно передаваемыми данными.
В неоптимальных методиках наподобие встраивания (Inlining) также используются push-функциональности, позволяющие заставить сервер откликаться на запросы. При этом Server Push представляет собой решение на уровне протокола, помогающее избежать возни с оптимизационными хаками.

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

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

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

Читать двоичные команды будет труднее, чем аналогичные текстовые, но зато сети будет легче их генерировать и парсить фреймы. Семантика остаётся без изменений. Браузеры, использующие HTTP/2, перед отправкой в сеть конвертируют текстовые команды в двоичные. Двоичный слой фреймов не имеет обратной совместимости с клиентами и серверами, использующими HTTP 1.x. Он является ключевым фактором, обеспечивающим значительный прирост производительности по сравнению с SPDY и HTTP 1.x. Какие преимущества даёт интернет-компаниям и онлайн-сервисам использование двоичных команд:

  • Низкие накладные расходы при парсинге данных - критически важное преимущество HTTP/2 по сравнению с HTTP 1.
  • Ниже вероятность ошибок.
  • Решение проблем с безопасностью, наподобие атак с разделением запросов (response splitting attack), проистекающих из текстовой природы HTTP 1.x.
  • Реализуются прочие возможности HTTP/2, включая сжатие, мультиплексирование, приоритезацию, управление потоками и эффективную обработку TLS.
  • Компактность команд упрощают их обработку и реализацию.
  • Выше эффективность и устойчивость к сбоям при обработке данных, передаваемых между клиентом и сервером.
  • Снижение сетевой задержки и повышение пропускной способности.

Приоритезация потоков

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

Приоритезация осуществляется с помощью присваивания каждому потоку зависимостей (Dependencies) и веса (Weight). Хотя все потоки, по сути, и так зависят друг от друга, ещё добавляется присваивание веса в диапазоне от 1 до 256. Детали механизма приоритезации всё ещё обсуждаются. Тем не менее, в реальных условиях сервер редко управляет такими ресурсами, как ЦПУ и подключения к БД. Сложность реализации сама по себе не даёт серверам выполнять запросы на приоритезацию потоков. Продолжение работ в этом направлении имеет особенное значение для успеха HTTP/2 в долгосрочной перспективе, потому что протокол позволяет обрабатывать многочисленные потоки в рамках единственного TCP-соединения.

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

  • Эффективное использование сетевых ресурсов.
  • Снижение времени доставки запросов первичного контента.
  • Повышение скорости загрузки страниц.
  • Оптимизация передачи данных между клиентом и сервером.
  • Снижение отрицательного эффекта от сетевых задержек.

Сжатие заголовков с сохранением состояния

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

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

В HTTP/2 это решается с помощью сжатия большого количества избыточных фреймов с заголовками. Сжатие осуществляется с помощью алгоритма HPACK, это простой и безопасный метод. Клиент и сервер хранят список заголовков, использовавшихся в предыдущих запросах.

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

  • Эффективную приоритезацию потоков.
  • Эффективное использование механизмов мультиплексирования.
  • Снижает накладные расходы при использовании ресурсов. Это один из первых вопросов, обсуждаемых при сравнении HTTP/2 с HTTP 1 и SPDY.
  • Кодирование больших и часто используемых заголовков, что позволяет не отправлять весь фрейм с заголовком. Передаваемый размер каждого потока быстро уменьшается.
  • Устойчивость к атакам, например, CRIME - эксплойтам потоков данных со сжатыми заголовками.

Различия между HTTP 1.x и SPDY

Базовая семантика приложения HTTP в последней итерации HTTP/2 осталась без изменений, включая коды статусов, URI, методики и файлы заголовков. HTTP/2 основан на SPDY, созданной в Google альтернативе HTTP 1.x. Основные различия кроются в механизмах обработки клиент-серверных запросов. В таблице отражены основные различия между HTTP 1.x, SPDY и HTTP/2:
HTTP 1.x SPDY HTTP2
Необходим SSL. SSL не требуется, но рекомендуется.
Медленное шифрование. Быстрое шифрование. Шифрование стало ещё быстрее.
Один клиент-серверный запрос на одно TCP-соединение. Много клиент-серверных запросов на одно TCP-соединение. Осуществляются одновременно на одном хосте. Многохостовое мультиплексирование. Осуществляются на нескольких хостах в одном экземпляре.
Нет сжатия заголовков. Введено сжатие заголовков. Используются улучшенные алгоритмы сжатия заголовков, что повышает производительность и безопасность.
Нет приоритезации потоков. Введена приоритезация потоков. Улучшенные механизмы приоритезации потоков.

Как HTTP/2 работает с HTTPS

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

Браузерная поддержка HTTP/2 включает в себя HTTPS-шифрование, и фактически улучшает общую производительность обеспечения безопасности при работе с HTTPS. Ключевыми особенностями HTTP/2, позволяющими обеспечить безопасность цифровых коммуникаций в чувствительном сетевом окружении, являются:

  • меньшее количество TLS-хэндшейков,
  • меньшее потребление ресурсов на стороне клиента и сервера,
  • улучшенные возможности повторного использования имеющихся веб-сессий, но без уязвимостей, характерных для HTTP 1.x.

HTTPS применяется не только в широко известных компаниях и для обеспечения кибербезопасности. Этот протокол также полезен владельцам онлайн-сервисов, обычным блогерам, интернет-магазинам и даже пользователям соцсетей. Для HTTP/2 необходима самая свежая, наиболее безопасная версия TLS, поэтому все онлайн-сообщества, владельцы компаний и вебмастеры должны удостовериться, что их сайты по умолчанию используют HTTPS.

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

Основные преимущества HTTP/2

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

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

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

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

Производительность сети

Это понятие отражает совокупный эффект всех нововведений HTTP/2. Результаты бенчмарков (см. главу «Сравнение производительности HTTPS, SPDY и HTTP/2») демонстрируют увеличение производительности при использовании HTTP/2 по сравнению с его предшественниками и альтернативными решениями.

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

Технологии наподобие мультиплексирования помогают одновременно передавать больше данных. Как большой пассажирский самолёт, с несколькими этажами, напичканными сиденьями.

Что происходит, когда механизмы передачи данных сметают все преграды на пути к повышению производительности сети? У высокой скорости работы сайтов есть побочные явления: пользователи получают больше удовольствия, улучшается оптимизация для поисковых сервисов, ресурсы используются эффективнее, растёт аудитория и объёмы продаж, и многое другое.

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

Производительность мобильной сети

Ежедневно миллионы пользователей выходят в сеть со своих мобильных устройств. Мы живём в «эру постПК», множество людей используют смартфоны в качестве основного устройства для доступа к онлайн-сервисам и выполнения большинства рутинных вычислительных задач прямо на ходу, вместо длительного сидения перед мониторами настольных компьютеров.

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

Интернет подешевле

С момента создания Всемирной паутины стоимость использования интернета быстро снижалась. Главными задачами развития сетевых технологий всегда были расширение доступа и повышение его скорости. Однако снижение цен, судя по всему, застопорилось, особенно в свете утверждений относительно монополии телекоммуникационных провайдеров.

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

Экспансивный охват

Густонаселённые регионы Азии и Африки всё ещё испытывают нехватку доступа в интернет с приемлемой скоростью. Провайдеры стараются извлечь максимальную прибыль, предлагая свои услуги только в крупных городах и развитых районах. Благодаря преимуществам HTTP/2 можно будет уменьшить нагрузку на сети, выделив часть ресурсов и пропускной способности каналов для жителей удалённых и менее развитых районов.

Насыщенность мультимедиа

Сегодня интернет-пользователи практически требуют контент и сервисы, насыщенные мультимедиа, с моментальной загрузкой страниц. При этом для успешной конкуренции владельцам сайтов необходимо регулярно обновлять их содержимое. Стоимость соответствующей инфраструктуры не всегда подъёмна для интернет-стартапов, даже при условии использования облачных сервисов по подписке. Преимущества и технологические особенности HTTP/2, вероятно, не помогут сильно уменьшить размеры файлов, но зато снимут по несколько байт с накладных расходов при передаче «тяжёлого» медиа-контента между клиентом и серверами.

Улучшение опыта использования мобильного интернета

Прогрессивные онлайн-компании ради эффективного охвата быстрорастущей мобильной аудитории следуют стратегии Mobile-First. Пожалуй, главным ограничением, влияющим на использование мобильного интернета, являются не самые выдающиеся характеристики аппаратных компонентов смартфонов и планшетов. Это выражается в более длительных задержках при обработке запросов. HTTP/2 позволяет уменьшить продолжительность загрузки и сетевых задержек до приемлемого уровня.

Более эффективное использование сети

«Тяжёлый» медиа-контент и сайты со сложным дизайном приводят к заметному росту потребления ресурсов при обработке клиентом и сервером браузерных запросов. Хотя веб-разработчики и выработали приемлемые оптимизационные хаки, всё же появление устойчивого и надёжного решения в виде HTTP/2 было неизбежным. Сжатие заголовков, инициативная отправка данных сервером, зависимости потоков и мультиплексирование - всё это ключевые особенности, улучшающие эффективность использования сети.

Безопасность

Преимущества HTTP/2 не ограничиваются одной лишь производительностью. Алгоритм HPACK позволяет обходить распространённые угрозы, нацеленные на текстовые протоколы уровня приложения. Для защиты данных, передаваемых между клиентом и сервером, в HTTP/2 используется подход «Безопасность через непонятность» (Security by Obscurity): команды представлены в двоичном виде, применяется сжатие метаданных HTTP-заголовков. Кроме того, протокол может похвастаться полноценной поддержкой шифрования и требует применения улучшенной версии Transport Layer Security (TLS1.2).

Инновационность

HTTP/2 является воплощением идеи высокопроизводительной сети. Этот протокол лежит в основе кибермира, каким мы его знаем сегодня. Изменения, вносимые HTTP/2, в основном базируются на свойствах SPDY, который стал огромным шагом вперёд по сравнению с HTTP 1.x. И в ближайшем будущем HTTP/2 полностью заменит как SPDY, так и предыдущие версии HTTP. Веб-разработчики смогут избавиться от сложных оптимизационных хаков при создании высокопроизводительных сайтов и сервисов.

Преимущества HTTP/2 с точки зрения SEO

SEO-маркетинг лежит где-то посередине между наукой и искусством. Из-за усложнения проприетарных алгоритмов, используемых популярными поисковиками, традиционные нечестные SEO-методики уже не позволяют манипулировать результатами поисковой выдачи. И в соответствии с этим онлайн-компаниям нужно менять свои стратегии маркетинга. Необходимо разумно инвестировать в созданные с нуля, тщательно проработанные сайты, оптимизированные с точки зрения не просто скорости, а превосходной производительности, безопасности и пользовательского опыта. Это более предпочтительные атрибуты, позволяющие формировать поисковые выдачи с наиболее точной информацией и сайтами, удобными в использовании для всей целевой аудитории.

Стандартные процессы поисковой оптимизации выходят за рамки маркетинговой фронтэнд-тактики. Теперь они охватывают полный цикл обмена данными между клиентом и сервером. SEO-оптимизаторы, которые ранее были ключевыми фигурами в командах интернет-маркетинга, потеряли свои позиции с появлением новых технологий цифровых коммуникаций. И преобладание среди них HTTP/2 свидетельствует о тектоническом сдвиге, который заставляет веб-разработчиков и маркетологов вернуться к чертёжным доскам.

Критически важным фактором для поисковой оптимизации сегодня является внедрение и оптимизация инфраструктуры для HTTP/2 и многообещающих преимуществ в производительности. Онлайн-компании, страдающие от недостаточности адекватной органической пользовательской базы, не могут позволить себе пренебрегать HTTP/2, а следовательно и улучшениями с точки зрения SEO. Ведь этим компаниям приходится конкурировать на почве инноваций с растущими сетевыми бизнес-империями, и высоко ранжированный онлайн-сервис поднимется ещё выше благодаря реализации HTTP/2 на стороне серверов.

Сравнение производительности HTTPS, SPDY и HTTP/2

Результаты бенчмарков ясно показывают ситуацию с улучшением производительности в новом протоколе.

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

Подробности тестирования:

Результаты этого теста говорят нам следующее:

  • Размеры заголовков клиентского запроса и серверного отклика : HTTP/2 демонстрирует, что использование сжатия позволяет значительно уменьшить размер заголовка. При этом SPDY уменьшает заголовок только серверного отклика для данного запроса. HTTPS вообще не уменьшает заголовки.
  • Размер сообщения серверного отклика : размер отклика HTTP/2-сервера оказался больше, но зато в нём применялось более стойкое шифрование.
  • Количество использованных TCP-соединений : при обработке многочисленных одновременных запросов(мультиплексирование) HTTP/2 и SPDY используют меньше сетевых ресурсов, следовательно, снижается задержка.
  • Скорость загрузки страницы : HTTP/2 постоянно был быстрее SPDY. HTTPS был значительно медленнее из-за отсутствия сжатия заголовков и инициативной отправки данных сервером.

Браузерная поддержка HTTP/2 и доступность

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

Клиентская поддержка

Пользователям не нужно заботиться о настройке поддержки HTTP/2 в своих браузерах - «полноценных» и мобильных. Chrome и Firefox давно поддерживают эту технологию , а в Safari поддержка HTTP/2 появилась в 2014. В IE данный протокол поддерживается только начиная с Windows 8.

Основные мобильные браузеры, включая Android Browser, Chrome для Android и iOS, а также Safari в iOS8 и выше, уже поддерживают HTTP/2. Рекомендуется на всякий случай поставить последние стабильные версии мобильных и настольных браузеров, чтобы получить максимальную производительность и преимущества в безопасности.

Серверная поддержка: Apache и Nginx

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

Nginx -серверы, составляющие 66% всех активных веб-серверов , могут похвастаться встроенной поддержкой HTTP / 2. А для обеспечения браузерной поддержки HTTP/2 на Apache, нужно воспользоваться модулем mod_spdy . Он разработан Google для внедрения поддержки в Apache 2.2 таких функций, как мультиплексирование и сжатие заголовков. Это ПО было передано в дар Apache Software Foundation.

Как начать использовать HTTP/2?

Для настройки HTTP/2 на своём сайте воспользуйтесь этой простой инструкцией:
  1. Проверьте, чтобы был включен HTTPS:
    • Приобретите в проверенной организации сертификат SSL или TLS.
    • Активируйте сертификат.
    • Установите сертификат.
    • Обновите сервер для включения протокола HTTPS.
  2. Проверьте, чтобы базовая сетевая инфраструктура включала в себя поддержку HTTP/2 на уровне серверного ПО. Серверы Nginx имеют нативную поддержку, в Apache она появилась в октябре 2015 (в версии 2.4). В более ранних версиях для поддержки HTTP/2 нужно установить дополнительные модули.
  3. Обновите, сконфигурируйте и протестируйте ваши серверы. описана конфигурация и процедуры тестирования для серверов Apache. Свяжитесь со своим хостинг-провайдером и удостоверьтесь, что ваш сайт готов к использованию HTTP/2.
  4. Для проверки правильности конфигурации HTTP/2 воспользуйтесь этим инструментом .

Заключение

Нас ждёт неизбежное доминирование и превосходство HTTP/2. Протокол уровня приложения, похоже, несёт в себе наследие HTTP 1.x, который когда-то изменил сеть благодаря своим революционным возможностям по передаче данных. Но HTTP/2 демонстрирует гораздо более значительное технологическое превосходство над своим предшественником, чем HTTP 1.x в своё время.

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

Теги: Добавить метки

  • Перевод

Недавно вышла новая версия стандарта HTTP. В мае 2015 года был утвержден HTTP/2, который получил распространение среди браузеров и веб-серверов (включая NGINX и NGINX Plus). На данный момент более 60% используемых браузеров поддерживают HTTP/2, причем эта цифра продолжает увеличиваться с каждым месяцем.

Стандарт HTTP/2 основан на протоколе SPDY, разработанном компанией Google. В Google Chrome поддержка SPDY будет осуществляться до начала 2016 года . NGINX одним из первых реализовал протокол SPDY и сейчас играет ведущую роль в продвижении HTTP/2. Была опубликована , в которой дано подробное описание HTTP/2, приводится сравнение со SPDY и подробно описывается процесс внедрения нового протокола.

Основные особенности HTTP/2 аналогичны SPDY:

  • HTTP/2 бинарный, а не текстовый протокол, что делает его компактнее и эффективнее.
  • В HTTP/2 используется только одно мультиплексирующее соединение до хоста, вместо множества соединений передающих по одному файлу.
  • В HTTP/2 используется сжатие заголовков специализированным протоколом HPACK (вместо gzip, который использовался в SPDY).
  • В HTTP/2 применяется сложный механизм приоритезации, чтобы отдавать браузерам наиболее необходимые файлы в первую очередь (в SPDY использовался более простой алгоритм).
Теперь необходимо углубиться и рассмотреть подробнее особенности нового протокола. Эта статья написана с целью помочь принять решение о переходе на HTTP/2, а также рассматривает возможные оптимизации при внедрении протокола.
  1. Терминируйте HTTP/2
  2. Начните с использования SPDY
  3. Откажитесь от HTTP/1.x оптимизации
  4. Внедрите HTTP/2 или SPDY
  5. Пересмотрите HTTP/1.x оптимизации
  6. Рассмотрите дружественный HTTP/2 шардинг
Примечание: строго говоря, для использования SPDY и HTTP/2 не требуется TLS, но основные преимущества проявляются при включении SSL/TLS, поэтому браузеры поддерживают SPDY и HTTP/2 только при наличии SSL/TLS.

Оцените необходимость внедрения HTTP/2

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

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

  1. Используется только одно соединение с сервером вместо множества соединений, передающих по одному файлу. Другими словами, уменьшается количество соединений, что особенно полезно при использовании TLS.
  2. Эффективное использование TLS. HTTP/2 делает только один TLS хэндшейк, а мультиплексирование позволяет эффективно использовать это соединение. HTTP/2 также сжимает данные заголовка, а устранение HTTP/1.x оптимизаций (таких как конкатенация файлов) позволяет алгоритму кэширования работать более эффективно.
  3. Упрощение веб-приложений. При использовании HTTP/2 можно избавиться от HTTP/1.x оптимизаций, которые доставляют лишение неудобства и разработчикам.
  4. Отлично подходит для сложных веб-страниц. HTTP/2 отлично подходит для веб-страниц, которые одновременно используют HTML, CSS, JavaScript, картинки и видеоролики. Браузеры могут приоритезировать запросы к файлам, чтобы наиболее необходимые части страницы присылались в первую очередь.
  5. Безопасность соединения. Хотя при использовании HTTP/2 может произойти потеря производительности из-за использования TLS, но в то же время TLS сделает веб-приложения более безопасными для пользователей.

И пять соответствующих недостатков, с которыми можно столкнуться:

  1. Большие затраты для одного соединения. Алгоритм сжатия данных HPACK требует поддержки таблицы преобразования на обоих концах. Также для одного соединения требуется больше памяти.
  2. Возможно использование TLS избыточно. Если передаваемая информация не нуждается в защите или уже защищена с помощью DRM (или другого шифрования), то в этом случае TLS вряд ли будет полезен.
  3. Поиск и удаление существующих HTTP/1.x оптимизаций необходимы для увеличения производительности HTTP/2, что является дополнительной работой.
  4. Не дает преимуществ при загрузке больших файлов. Если веб-приложение в основном рассчитано на загрузку больших файлов или видеостриминг, то, скорее всего, использование TLS будет ошибочно, а мультиплексирование не принесет никакой пользы.
  5. Безопасность не важна. Возможно посетителям не важно, что видео с котиками, которыми они делятся на вашем сайте, не защищено TLS и HTTP/2 (что может быть верно).
Все сводится к производительности и здесь есть хорошие и плохие новости.

Хорошие новости в том, что исходя из тестов, которые были проведены в NGINX следуют результаты предсказанные из теории: для сложных веб-страниц, запрошенных с типичными задержками (latency), производительность HTTP/2 выше, чем HTTP/1.x и HTTPS. Результаты разделены на три группы в зависимости от типичного round-trip time (RTT):

  • Очень низкое RTTs (0-20 мс): практически никакой разницы между HTTP/1.x, HTTP/2, и HTTPS не наблюдается.
  • Среднее (типичное для интернета) RTTs (30-250 мс): HTTP/2 быстрее чем HTTP/1.x, и оба быстрее чем HTTPS. Для соседних городов в США, RTT составляет около 30 мс, и около 70 мс от одного берега до другого (около 3000 миль). По одному из самых коротких маршрутов между Токио и Лондоном, RTT составляет около 240 мс.
  • Высокое RTTs (300 мс и выше): HTTP/1.x быстрее чем HTTP/2, который быстрее чем HTTPS.

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

Более подробно с процессом тестирования и результатами можно ознакомиться в презентации с конференции nginx.conf 2015.

Тем не менее, все веб-страницы и сеансы пользователей отличаются друг от друга. Например, если у вас есть стриминг видео или большие загружаемые файлы, то ваши результаты могут отличаться или даже быть противоположными.

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

Терминируйте HTTP/2

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


При использовании отдельных серверов, появляется возможность перейти к мультисерверной архитектуре. Сервера могут разделяться физически, виртуально или может использоваться облачное окружение, такое как AWS . Это усложняет архитектуру, по сравнению с односерверным решением или комбинацией cервер+база данных, но дает много преимуществ и является необходимостью для высоконагруженных сайтов.

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

NGINX и NGINX Plus часто используются для всех этих целей - терминирование TLS и HTTP/2, балансировка нагрузки и многое другое. Существующая среда не требует никаких изменении, за исключением части по взаимодействию пользователей с сервером NGINX.

Начните с использования SPDY

SPDY является предшественником протокола HTTP/2 и его производительность сравнима с HTTP/2. Так как SPDY существует уже на протяжении нескольких лет, все популярные браузеры поддерживают его , в отличии от HTTP/2 , который появился сравнительно недавно. Тем не менее, на момент написания статьи, разрыв сокращается и более 60% браузеров уже поддерживают HTTP/2, в то время как SPDY поддерживают более 80%.

Если есть необходимость срочно реализовать новый транспортный протокол, причем использовать протокол с максимальной поддержкой среди пользователей, то стоит начать со SPDY. Позднее, в начале 2016 года, когда поддержка SPDY будет удалена, переключиться на HTTP/2. К этому моменту уже большее количество пользователей будет использовать браузеры, которые поддерживают HTTP/2, поэтому такой переход может быть оптимальным с точки зрения большинства пользователей.

Откажитесь от HTTP/1.x оптимизаций

Перед внедрением HTTP/2 необходимо выявить оптимизации для HTTP/1.x. Далее перечислены четыре типа оптимизаций, на которые стоит обратить внимание:
  1. Шардинг. Размещение файлов на разных доменах для параллельной передачи браузеру; сети доставки контента (CDNs) делают это автоматически. Такая оптимизация может повредить производительности HTTP/2. Вы можете использовать дружественный с HTTP/2 шардинг для пользователей HTTP/1.x (см. дружественный HTTP/2 шардинг).
  2. Использование спрайтов. Спрайтами называют коллекции картинок, которые передаются в виде одного файла; после этого на стороне клиента картинки по необходимости извлекаются из коллекции. Эта оптимизация менее эффективна при использовании HTTP/2, хотя все равно может быть полезна.
  3. Объединение файлов. Подобно спрайтам, часть файлов, которые обычно хранятся отдельно, объединяются в один. После чего браузер находит и запускает код по мере необходимости в рамках склеенного файла.
  4. Встраивание файлов. CSS, JavaScript и даже изображения вставляются непосредственно в HTML-файл, что уменьшает количество передаваемых файлов, за счет увеличения исходного HTML-файла.
Последние три типа оптимизации по объединению маленьких файлов в более крупные, сокращению новых связей и инициализации дополнительных соединений, особенно важны при использовании TLS.

Первая оптимизация, шардинг, работает по-другому - она заставляет открыть больше соединений, используя дополнительные домены. Вместе эти, кажущиеся противоречивыми, методы могут быть достаточно эффективными в повышении производительности HTTP/1.x сайтов. Тем не менее, все они расходуют время, усилия и ресурсы для разработки, внедрения, управления и поддержания работы.

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

Внедрите HTTP/2 или SPDY

На самом деле переход на HTTP/2 или SPDY довольно прост. Для пользователей NGINX, необходимо просто «включить» протокол в конфигурации NGINX, как описано на примере HTTP/2. После этого, сервер будет уведомлять браузер клиента о возможности использования HTTP/2 или SPDY.

После включения HTTP/2 на сервере, пользователи, браузеры которых поддерживают HTTP/2, будут подключаться и работать с веб-приложениями через HTTP/2. Людям со старыми версиями браузеров придется работать через HTTP/1.x (см. рисунок ниже). При внедрении HTTP/2 или SPDY на высоконагруженные сайты, следует измерить производительность до и после, и откатить изменения в случае проявления негативных последствий.

Примечание: Так как при включении HTTP/2 используется одно соединение, то некоторые настройки конфигурации в NGINX становятся более важными. Рекомендуется просмотреть конфигурацию NGINX с особым вниманием к настройке и тестированию параметров таких директив, как output_buffers, proxy_buffers и ssl_buffer_size. Следует обратить внимание на , конкретные советы по TLS ( и ), и о производительности NGINX при использовании TLS.

Примечание: При использовании шифров совместно с HTTP/2, следует обратить внимание на следующее: RFC для HTTP/2 имеет длинный список шифров, которых следует избегать. Если у вас есть желание настроить список шифров самостоятельно, то в таком случае рекомендуется рассмотреть настройку ssl_ciphers и включение ssl_prefer_server_ciphers on , после чего протестировать подходящие шифры со всеми популярными версиями браузеров. Индикатор для популярных браузеров Qualys’ SSL Server test (на ноябрь 2015) считается ненадежным для подсчета HTTP/2 хэндшейков .

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

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

  • Все уже готово. Если приложения не были оптимизированы под HTTP/1.x или были сделаны незначительные изменения, то все готово, чтобы использовать HTTP/2.
  • Смешанный подход. Можно уменьшить конкатенацию данных, но не устранить полностью. Например, некоторые спрайты изображений могут остаться, в то же время избавиться от данных, встроенных в HTML.
  • Полный отказ от HTTP/1.x оптимизации (но см. дружественный HTTP/2 шардинг и примечания). Можно просто полностью избавиться от оптимизаций.
Кэширование имеет некоторые особенности. В теории кэширование работает эффективно в случае, когда применяется ко множеству небольших файлов. Тем не менее, в этом случае выполняется большое количество операций I/O. Поэтому объединение связанных между собой файлов может быть полезным, как для рабочего процесса, так и для производительности приложений. Шардинг является, пожалуй, самой непростой, и в то же время, возможно, самой успешной стратегией оптимизации HTTP/1.x. Шардинг можно использовать для повышения производительности HTTP/1.x, но для HTTP/2 (в котором используется только одно соединение) он в основном игнорируется.

Для использования шардинга в паре с HTTP/2, следует сделать две вещи:

  • Сделать так, чтобы доменные имена для шардинговых ресурсов резолвились в одинаковые IP-адреса.
  • Убедиться в том, что используется wildcard-сертификат - в таком случае он будет валидным для всех доменных имен, используемых при шардинге. Либо убедиться, в наличии соответствующего мультидоменного сертификата.
Подробную информацию можно найти .

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

Заключение

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

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

Теги: Добавить метки



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: