HTTP/2 — это улучшенная версия протокола HTTP

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

SPDY

В 2009 году компания Google разработала новый протокол, названный SPDY (читается как «спиди»). SPDY включает три основных улучшения по сравнению с HTTP/1.1.

Сжатие заголовков.

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

  • Запросы, выполняемые параллельно

HTTP — это протокол, основанный на обмене сообщениями. После установки TCP-соединения и отправки HTTP-запроса необходимо дождаться ответа, прежде чем можно будет отправить следующий запрос. Каждый запрос требует, по крайней мере, одной обратной поездки между браузером и сервером, что может занять несколько сотен миллисекунд, создавая заметную задержку. Если какой-либо из ответов приходит медленно, это приводит к задержке всех последующих запросов. Это явление называется блокировкой по первой линии. Хотя можно открыть несколько параллельных соединений для одновременной отправки нескольких запросов, современные браузеры, как правило, ограничивают количество таких соединений на один хост до 4-8.

Читайте также:  Подготовка PXE-сервера для установки Red OS

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

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

  • Принуждение и указания сервера

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

Читайте также:  Лучшие операционные системы Linux и их особенности

Благодаря технологии SPDY сервер способен заранее передавать данные без необходимости запроса от браузера.

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

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

  • CSS-спрайт
  • Картинка, встроенная в текст.
  • Шардинг для повышения эффективности параллельной обработки запросов.
  • Слияние CSS и JavaScript

Ограничения

SPDY является превосходным решением, однако у него всё ещё существуют определённые ограничения.

  1. Первое — это запрет на использование HTTPS.
  2. SPDY взаимодействует с каждым хостом отдельно. Чтобы полностью загрузить веб-страницу, браузеру может потребоваться связаться с несколькими хостами. Даже если все они поддерживают SPDY, браузер вынужден устанавливать отдельное соединение для каждого хоста. Мультиплексирование возможно лишь для каждого отдельного хоста.

Как активировать SPDY в Nginx

Перед тем как начать использовать SPDY, необходимо активировать HTTPS. Бесплатный SSL/TLS сертификат можно получить через Let’s Encrypt. Если вы еще не настроили HTTPS, воспользуйтесь следующим руководством, чтобы получить бесплатный сертификат SSL/TLS.

  • Как корректно настроить HTTPS на Nginx с помощью Let’s Encrypt на Ubuntu

Если вы активировали HTTPS, убедитесь, что Nginx был скомпилирован с поддержкой модуля SPDY.

sudo nginx - V

Если вы наблюдаете данный текст, это свидетельствует о том, что модуль SPDY активирован в вашей конфигурации Nginx.

Читайте также:  Тип файловой системы в Linux

--with-http_spdy_module

Настройте конфигурационный файл сервера.

sudo vi /etc/nginx/conf.d/yourdomain.conf

sudo vi /etc/nginx/sites-available/yourdomain.conf

В разделе сервера внесите spdy после строки listen 443 ssl.

server < слушать 443 ssl spdy; server_name www. linux16.ru; ssl_certificate /etc/ssl/fullchain. pem; ssl_certificate_key /etc/ssl/privkey. pem; .

После этого сохраните файл и закройте его. Перезапустите конфигурацию Nginx.

sudo service nginx reload

sudo systemctl reload nginx

Вы успешно справились! Это было легко!

С версии Nginx 1.9.5 модуль ngx_http_spdy_module был заменён на ngx_http_v2_module. Таким образом, если вы используете Nginx версии выше 1.9.5, активация SPDY не требуется. Ознакомьтесь с нижеприведённой информацией о HTTP/2 и способах его активации в Nginx.

HTTP/2

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

Усовершенствования по сравнению с SPDY

Сжатие HPACK представляет собой метод оптимизации, используемый для уменьшения объема данных, передаваемых по сети.

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

После этого сохраните файл и закройте его. Перезапустите конфигурацию Nginx.

sudo service nginx reload

sudo systemctl reload nginx

Вы успешно справились! Это было легко!