HTTPS, HTTP/2, HTTP/3 - что, как и в чем разница

Про сам HTTP почитать можно - здесь (описание, заголовки, коды состояний, запросы)

HTTPS

HTTPS это тот же HTTP, только он использует SSL/TLS для шифрования запросов и ответов. В обычном виде HTTP показывает тело запроса, URL-адрес, строку запроса и заголовки. И это все может получить кто угодно кто будет находится между клиентом и сервером (роутер или промежуточный сервер). HTTPS шифрует все кроме удаленного адреса, url, метода запроса и кода статуса.

HTTP/2

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

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

  • HTTP-сообщения разделяются на один или несколько фреймов с общим заголовком. Это одна из опций которая позволяет ускорить загрузку сайта. Например, вместо двух запросов по типу этого:
GET /test HTTP/1.1
Host: vtw.su
Content-TypeL text/html;
charset=utf-8
Content-Length: 250
{ 'test' : 'ok test' }

GET /test HTTP/1.1
Host: vtw.su
Content-TypeL text/html;
charset=utf-8
Content-Length: 150

{ 'test2' : 'ok test2' }

 Можно получить один:

GET /test HTTP/1.1
Host: vtw.su
Content-TypeL text/html;
charset=utf-8
Content-Length: 400
{ 'test' : 'ok test' }
{ 'test2' : 'ok test2' }
  • Заголовки сжимаются алгоритмом HPACK. Еще один способ ускорения. После сжатия заголовков, объем передаваемых данных сокращается.
  • Мультиплексирование это одно из самых приятных преимуществ HTTP/2. В HTTP/1 для каждого запроса нужно устанавливать свое соединение, и одновременно количество соединений ограничено. С HTTP/2 клиент и сервер могут отправлять множество запросов и ответов в одном соединении. Смысл в том что если в первом протоколе, на каждый запрос соединение открывается и закрывается, то здесь же можно передать несколько запросов между открытием и закрытием.
  • Push-сервер. Сервер получает возможность отправлять несколько ответов на один запрос. Например если клиент делает запрос на страницу, для которой нужны другие файлы (стили, скрипты, графика и т.д.), то сервер может это определить и передать сразу все, одним ответом. Другими словами, сервер видит, что могут понадобится еще другие ресурсы на новой странице.
  • HTTP/2 - бинарный протокол. Устраняет некоторые проблемы с безопасностью, которые связанные с передачей текста в HTTP.
  • Приоритизация. Браузер получает в первую очередь наиболее важные файлы. Учитывается вес и зависимость.
  • Менее подвержен ошибкам и занимает меньше места в сети.

Некоторые недостатки HTTP/2

  • Периодически возникают сложности с блокировкой заголовков при одновременной загрузки данных. В какой-то момент могут остановится все потоки при потере пакета.
  • Каждое соединение требует больших объёмов памяти по сравнению с HTTP.
  • Веб-приложения с ресурсоёмкими аудио и видеопотоками работают медленнее.
  • Использование одновременных запросов увеличивает нагрузку на сервер, что приводит к тайм-ауту запросов

Особенности по миграции на HTTP/2 с HTTP/1

  • Если SSL сертификата нет, то браузеры будут игнорировать HTTP/2.
  • Для ускорения производительности сайтов на HTTP/1 была общая тенденция объединять файлы. У Битрикса даже из коробки есть возможность объединять файлы для этого. В общем от этого нужно избавляться, на HTTP/2 это не просто бесполезно, это вредно. Это же касается всеми любимых спрайтов, они теперь не нужны.

Поддержка

  • Apache с версии 2.4.17;
  • NGINX c 1.9.5;

Более подробная информация о серверной поддержке

На 2023 год, стоит оставлять еще поддержку HTTP/1.x.

HTTP/3

У HTTP/3 добавляется помощник, протокол — QUIC.  Он мультиплексирует несколько потоков данных поверх UDP. Протокол разработали в 2012 году, ребята из Goggle, и он является основой для HTTP/3. Главный его плюс, это сокращение задержки при установлении соединения.

Преимущества

  • Мультиплексирование без блокировки HOL. HTTP/3 работает поверх UDP. Используя UDP, этот протокол не ждёт успешной передачи, а продолжает процесс загрузки.
  • Протоколу достаточно один раз проверить адресат, чтобы затем установить сеанс. Это влияет на скорость шифрования.
  • Неразрывное соединение. HTTP/3 использует идентификаторы соединения, поэтому загрузка продолжается даже при смене сети. То есть можно переключится с LTE на Wi-Fi без повторного установления сеанса.

Поддержка

На начало 2023 г. HTTP/3 это все таки экспериментальное обновление HTTP, и скорее всего еще будут правки. Но переходить с HTTP/2 будет проще чем с HTTP/1. На прикладном уровне HTTP/2 и HTTP/3 не имеют отличий (по крайней мере пока).

Полезная информация о HTTP/3 [RUS]

  1. История и ключевые концепции;
  2. Характеристики производительности HTTP/3;
  3. Развёртывание HTTP/3 на практике.

Сводка отличий между HTTP/1, HTTP/2 и HTTP/3

  HTTP HTTP/2 HTTP/3
Способ передачи Передача в виде текста. конвейерной обработки и блокировкой очереди. Двоичный уровень кадрирования кодирует запросы, ответы и разбивает их на более мелкие пакеты информации.
Сжатие Gzip. Заголовки не сжимаются HPACK. Заголовки сжимаются. QPACK и HPACK с сжатием заголовков.
Запрос ресурсов Встраивание Server Push
Переполнение буфера Каждое новое соединение требует отдельного механизма управления потоком. Присутствует мультиплексирование. Все потоки данных в одном соединении, клиент и сервер управляют потоками сами.
Коды состояний Нет различий
Методы запросов Нет различий

Дата публикации/обновления:

Автор: Виталий Трефилов

Новые посты в Telegram: @vtwblog

Комментарии

Оставить комментарий

Где-то допущена ошибка

Пожалуйста, представьтесь

Некорректно введена электронная почта

Введите комментарий

Слишком много текста

Ошибка в капче

Вы уже голосовали за этот комментарий

Ваш комментарий отправлен на модерацию

Имя*

Если укажете, будет отправлено уведомление об ответе.

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