Статьи

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

HTTP / 2 сетевой протокол

Эта статья является частью серии, созданной в сотрудничестве с SiteGround . Спасибо за поддержку партнеров, которые делают возможным использование SitePoint.

HTTP / 2 — это новейшая эволюция протокола передачи гипертекста (HTTP). HTTP — это сетевой протокол, используемый для запроса и получения страниц и данных в World Wide Web. Новая технология в конечном итоге заменит HTTP / 1.1, который был стандартизирован более двух десятилетий назад.

Чем HTTP / 2 отличается от HTTP / 1.1?

Возможно, HTTP / 2 лучше понимать как его оригинальное имя: HTTP / 2.0. Он имеет свои корни в протоколе SPDY (произносится быстро), разработанном Google в 2009 году.

HTTP / 1.1 имеет несколько проблем. Он был создан в то время, когда веб-страницы редко превышали 100 КБ, CSS не был доступен, и, хотя был представлен JavaScript, он редко использовался для чего-то большего, чем простая проверка форм или простые эффекты. Высокая пропускная способность, одностраничные приложения на основе Ajax и клиентские инфраструктуры были в течение многих лет. Никто не мог предусмотреть, чтобы страницы делали более нескольких запросов.

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

1. HTTP / 2 — двоичные данные

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

2. HTTP / 2 заголовки сжимаются

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

3. HTTP / 2 использует конвейерную обработку

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

4. HTTP / 2 мультиплексирован

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

5. HTTP / 2 реализует сервер Push

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

HTTP / 2 заметно лучше?

Результаты будут отличаться от системы к системе, но HTTP / 1.1 против HTTP / 2 с помощью средства тестирования HTTPS обычно сообщает, что HTTP / 2 работает в 10 раз быстрее, несмотря на то, что происходит через безопасное соединение.

Можно ли использовать HTTP / 2 сегодня?

Да. Однако HTTP / 2 включается только тогда, когда веб-сервер и браузер поддерживают протокол. При сбое любого конца соединение обычно возвращается к HTTP / 1.1. В конце 2016 года почти 11% из первых десяти миллионов веб-сайтов поддерживали HTTP / 2. Все последние версии Firefox, Safari, Edge, Chrome и других браузеров на базе Blink поддерживают протокол.

Вы можете проверить, активировал ли ваш хост HTTP / 2, введя URL вашего сайта в инструмент HTTP / 2 Test, предоставленный keycdn.com .

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

В идеале лучше всего использовать веб-хост, поддерживающий HTTP / 2 по умолчанию, например наш партнер по хостингу SiteGround . Они поддерживают HTTP / 2 на всех серверах без необходимости дальнейших действий. Кроме того, у них есть бесплатные SSL-сертификаты Let’s Encrypt — это необходимо при использовании HTTP / 2, поскольку большинство браузеров поддерживают HTTP / 2, только если он зашифрован.

Если вы используете собственный выделенный или виртуальный сервер, HTTP / 2 должен быть включен для любого веб-сервера, который вы используете. Большинство поддерживают протокол напрямую или имеют устанавливаемые модули. Это включает в себя Apache, nginx, LiteSpeed, Microsoft IIS и Node.js / Express, но обратите внимание, что функции могут отличаться. Например, nginx не поддерживает HTTP / 2 Server Push на момент написания. Обратитесь к своей документации для получения дополнительной информации.

Нужно ли обновлять мой сайт?

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

Возможно, вы используете систему сборки или ручные процессы для:

  • конвертировать много изображений в спрайт с одним изображением
  • встроенные изображения в HTML-странице или файлах CSS
  • объединение и минимизация CSS и JavaScript в отдельные файлы.

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

Вы также можете перемещать ресурсы в другие домены или CDN, чтобы разрешить более открытые соединения HTTP / 1.1. Это не обязательно для HTTP / 2, потому что вы можете сделать столько запросов, сколько вам нужно для одного соединения. Возможно, что отдельные домены могут повредить производительности из-за дополнительных поисков DNS и TCP-соединений, которые необходимо открыть.

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