Возможно, вы еще не слышали о HTTP / 2, но это самое последнее обновление HTTP. Новый стандарт протокола вводит некоторые новые концепции и делает связь между серверами и приложениями более быстрой и эффективной.
Что такое HTTP / 2?
Протокол передачи гипертекста версии 2, или HTTP / 2, является первым крупным обновлением HTTP за 15 лет.
Предыдущий стандарт протокола, HTTP / 1.1, использовался с 1997 года и использует смесь неуклюжих обходных путей для улучшения ограничений HTTP.
Он основан на SPDY («быстрый»), эксперимент с открытым исходным кодом, запущенный Google для решения некоторых проблем и ограничений HTTP / 1.1.
Инженерная рабочая группа по Интернету (IETF) определяет подобные изменения в протоколе передачи гипертекста версии 2, проект 17 :
«HTTP / 2 позволяет более эффективно использовать сетевые ресурсы и уменьшить восприятие задержки за счет введения сжатия поля заголовка и разрешения нескольких одновременных обменов по одному и тому же соединению […]
«Это также позволяет назначать приоритеты запросам, позволяя более важным запросам выполняться быстрее, что еще больше повышает производительность».
«HTTP / 2 также обеспечивает более эффективную обработку сообщений за счет использования двоичного фрейма сообщения».
«Данная спецификация является альтернативой синтаксису сообщений HTTP / 1.1, но не устарела. Существующая семантика HTTP остается неизменной ».
HTTP / 2 основан на SPDY
К 2012 году большинство современных браузеров и многие популярные сайты (Google, Twitter, Facebook и т. Д.) Уже поддерживали SPDY. По мере роста популярности SPDY рабочая группа HTTP (HTTP-WG) начала работу по обновлению стандарта HTTP.
С этого момента SPDY стал основой и экспериментальной ветвью для новых функций в HTTP / 2. В то время мы изучали, как SPDY может улучшить просмотр страниц С тех пор стандарт версии 2 был разработан, утвержден и опубликован.
Многие функции SPDY были включены в HTTP / 2, и Google в конце концов прекратил поддержку этого протокола в начале 2016 года.
Большинство браузеров в конечном итоге перестали поддерживать SPDY, и, поскольку альтернативы нет, HTTP / 2 становится стандартом де-факто.
Хотя стандарт протокола HTTP / 2 не является строго обратно совместимым с HTTP / 1, совместимость может быть достигнута посредством перевода. Клиент, использующий только HTTP / 1.1, не будет понимать сервер, использующий только HTTP / 2, и наоборот, поэтому новая версия протокола — HTTP / 2, а не HTTP / 1.2.
Тем не менее, важной частью работы, выполняемой HTTP-WG, является обеспечение того, чтобы HTTP / 1 и HTTP / 2 могли переводиться туда и обратно без потери информации.
Любые новые представленные механизмы или функции также не будут зависеть от версии и будут обратно совместимы с существующей сетью.
HTTP / 2 на самом деле не то, что пользователь может реализовать, но есть вещи, которые мы можем сделать, чтобы повлиять на скорость нашего просмотра. Верите ли вы в один из этих распространенных мифов, чтобы ускорить вашу скорость интернета?
Преимущества и особенности HTTP / 2
HTTP / 2 поставляется с отличными обновлениями стандарта HTTP. Некоторые из наиболее важных из них — двоичное кадрирование, мультиплексирование, установление приоритетов потока, управление потоком и передача на сервер.
Двоичное обрамление
После обновления HTTP2 / связь по протоколу HTTP разделяется на обмен двоично-закодированными кадрами. Эти кадры отображаются в сообщения, которые принадлежат конкретному потоку. Потоки затем мультиплексируются (в некотором смысле сплетены) в одном TCP-соединении.
Новый уровень двоичного кадрирования вводит некоторую новую терминологию; Потоки, сообщения и кадры.
- Потоки — это двунаправленные потоки байтов, которые переносят одно или несколько сообщений.
- Каждый из этих потоков имеет уникальный идентификатор и может переносить двунаправленные сообщения с использованием необязательной информации о приоритете.
- Кадры — это самая маленькая единица связи в HTTP / 2, которая содержит определенные наборы данных (заголовки HTTP, полезные данные сообщений и т. Д.). Заголовок как минимум идентифицирует поток, которому принадлежит кадр.
- Сообщения представляют собой полный набор фреймов, которые отображаются на логический запрос или ответное сообщение.
- Каждое сообщение представляет собой логическое HTTP-сообщение, например запрос или ответ, состоящий из одного или нескольких кадров.
Это позволяет нам использовать одно TCP-соединение, для чего в прошлом требовалось несколько.
мультиплексирование
HTTP / 1.1 гарантирует, что только один ответ может быть доставлен за одно соединение. И браузер откроет дополнительные соединения TCP, если клиент хочет сделать несколько параллельных запросов.
HTTP / 2 устраняет это ограничение HTTP / 1.1 и обеспечивает полное мультиплексирование запросов и ответов. Это означает, что клиент и сервер могут разбивать HTTP-сообщение на независимые кадры, которые затем чередуются и повторно собираются на другом конце.
В целом, это самое важное усовершенствование HTTP / 2, поскольку оно частично устраняет необходимость в нескольких соединениях. Это, в свою очередь, обеспечит многочисленные преимущества в производительности для всех веб-технологий.
Уменьшенное количество соединений означает меньшее количество рукопожатий на транспортном уровне (TLS), лучшее повторное использование сеансов и общее снижение требований к ресурсам клиента и сервера. Это делает приложения быстрее, проще и дешевле в развертывании.
Веб-сайты с большим количеством внешних ресурсов (изображения или скрипты) увидят наибольший прирост производительности благодаря мультиплексированию HTTP / 2.
Приоритетность потока и зависимость
Дальнейшие улучшения мультиплексированных потоков сделаны с весовыми и потоковыми зависимостями. HTTP / 2 позволяет нам дать каждому потоку вес (значение от 1 до 256) и сделать его явно зависимым от другого потока.
Эта комбинация зависимости и веса приводит к созданию дерева приоритетов, которое сообщает серверу, как клиент предпочел бы получать ответы.
Сервер будет использовать информацию в дереве приоритетов для управления распределением ЦП, памяти и других ресурсов, а также распределением полосы пропускания, чтобы гарантировать получение клиентом оптимальной доставки высокоприоритетных ответов.
Управление потоком
Проблемы с управлением потоком в HTTP / 2 аналогичны HTTP / 1.1. Однако, поскольку потоки HTTP / 2 мультиплексируются в одном TCP-соединении, управление потоком в HTTP / 1.1 больше не работает.
Короче говоря, управление потоком необходимо, чтобы остановить потоки, мешающие друг другу, чтобы вызвать блокировку. Это делает возможным мультиплексирование. HTTP / 2 позволяет использовать множество алгоритмов управления потоком, не требуя изменений протокола.
В HTTP / 2 не указан алгоритм управления потоком. Вместо этого был предоставлен набор строительных блоков, чтобы помочь клиентам и серверам применять свой собственный контроль потока.
Вы можете найти специфику этих строительных блоков в разделе «Управление потоком» интернет-проекта HTTP / 2.
Сервер Push
Ваш браузер обычно запрашивает и получает HTML-документ с сервера при первом посещении страницы. Затем серверу нужно дождаться, пока браузер проанализирует HTML-документ и отправит запрос на встроенные ресурсы (CSS, JavaScript, изображения и т. Д.).
В HTTP / 1.1 сервер не может отправлять эти ресурсы до тех пор, пока браузер не запросит их, а для каждого ресурса требуется отдельный запрос (т. Е. Несколько рукопожатий и соединений).
Пересылка сервера уменьшит задержку, позволяя серверу отправлять эти ресурсы без запроса, поскольку он уже знает, что клиенту они потребуются. Таким образом, в приведенном выше примере сервер будет использовать CSS, JavaScript ( общий язык сценариев на веб-страницах), а также изображения в браузере для быстрого отображения страницы.
По сути, серверная рассылка позволяет серверу отправлять несколько ответов на один клиентский запрос.
Хотя вручную, это эффект, который мы в настоящее время получаем, встраивая CSS или JS в наши HTML-документы — мы передаем встроенный ресурс клиенту, не дожидаясь, пока клиент запросит его.
Это большой шаг по сравнению с текущим стандартом HTTP строгого рабочего процесса один-на-один с запросом-ответом.
Ограничения HTTP / 2
SPDY придерживался более строгой политики безопасности и требовал шифрования SSL для всех соединений. HTTPS / 2 не требует шифрования, но многие службы не будут обслуживать HTTP / 2 без SSL.
Все основные браузеры поддерживают HTTP / 2, но ни один из них не будет поддерживать его без шифрования. На веб-сайте CanIU есть большой обзор таблиц текущей поддержки браузером HTTP / 2 , как показано выше.
Обратная совместимость и переводы между HTTP / 1.1 и HTTP / 2 замедляют скорость загрузки страницы.
На данный момент нет реальной причины, по которой шифрование не должно быть настройкой по умолчанию или обязательной настройкой. Если у вас уже есть сертификат SSL на вашем сайте, вы можете повысить безопасность вашего сайта HTTPS, включив HSTS.
Является ли HTTP / 2 следующей большой вещью?
HTTP / 2 был предложен в качестве стандарта в середине 2015 года, и большинство браузеров добавили его поддержку к концу этого года. HTTP / 2 уже влияет на работу Интернета и взаимодействие приложений и серверов.
Нет никаких требований для принудительного использования HTTP / 2, но пока он служит только преимуществам, а не недостаткам. Это также довольно незначительное изменение с точки зрения пользователя, которое люди на самом деле не заметят.
По данным W3Tech, 31,7% из первых 10 миллионов веб-сайтов в настоящее время поддерживают HTTP / 2. Для большинства из вас самый быстрый способ включить HTTP / 2 на своем веб-сайте — использовать CDN Cloudflare.
Следующий предложенный стандарт (HTTP / 3) уже находится в разработке и основан на QUIC , другом экспериментальном проекте Google. В октябре этого года HTTP-WG IETF и рабочая группа QUIC официально попросили QUIC стать новым мировым стандартом и переименовать его в HTTP / 3.
Если вам интересно, у Akamai.com есть быстрый инструмент, чтобы проверить, поддерживает ли ваш браузер HTTP / 2 . Если этого не произойдет, возможно, подумать о смене браузера.