HTTP/2 и HTTP/3
HTTP — это язык, на котором браузер и сервер договариваются о передаче страниц. У него есть версии, и от версии зависит, насколько шустро грузится сайт. Старый HTTP/1.1 был придуман, когда страницы состояли из пары файлов; современные сайты тянут десятки ресурсов сразу, и тут новые версии — HTTP/2 и HTTP/3 — дают ощутимый прирост. Разберём, в чём разница и как перейти.
Чем плох старый HTTP/1.1
В HTTP/1.1 по одному соединению файлы запрашиваются практически по очереди: пока не пришёл один, следующий ждёт. А современная страница — это десятки файлов: стили, скрипты, шрифты, картинки. Получается очередь, в которой ресурсы толкаются за место. Браузеры обходили это, открывая несколько соединений сразу, но это костыль, который тоже упирается в лимиты. Отсюда и тормоза на сайтах с большим числом ресурсов.
Три версии коротко
Что даёт HTTP/2
Главное нововведение — мультиплексирование: по одному соединению одновременно идёт сразу много файлов, без очереди. Плюс сжимаются служебные заголовки запросов, которых на странице бывают сотни. На практике сайт с множеством мелких ресурсов на HTTP/2 грузится заметно быстрее, чем на HTTP/1.1, — и без всяких переделок самого сайта.
Что добавляет HTTP/3
HTTP/3 работает поверх нового транспорта — QUIC (на базе UDP вместо TCP). Это убирает проблему, когда из-за одного потерянного пакета «застревали» все остальные. Выигрыш особенно чувствуется на мобильном и нестабильном интернете, а также ускоряет установку соединения. Для пользователя это ещё более быстрая и плавная загрузка, особенно в дороге и в местах со слабым сигналом.
Как включить и проверить
Хорошая новость — сайт переделывать не нужно, это уровень сервера. HTTP/2 сегодня поддерживают почти все хостинги и серверы; часто он уже включён, иначе включается в настройках или через поддержку. HTTP/3 пока новее, но его легко получить через CDN — многие сети раздают контент по HTTP/3 из коробки. Проверить версию просто:
колонка «Протокол»: h2 (HTTP/2) или h3 (HTTP/3)
Если видите http/1.1 — есть что улучшить. Версию протокола также показывают онлайн-сервисы проверки сайта.
Что устарело вместе с HTTP/1.1
Любопытный побочный эффект: приёмы, которыми годами ускоряли сайты под HTTP/1.1, на HTTP/2 стали не нужны, а порой и вредны. Раньше боролись с очередью, объединяя файлы: десять иконок склеивали в один спрайт, все стили — в один CSS, а ресурсы раскидывали по нескольким доменам (домен-шардинг), чтобы открыть больше параллельных соединений. На HTTP/2 эти костыли теряют смысл — он и так отдаёт много файлов сразу по одному соединению. Более того, склейка мешает кэшированию (поменяли один файл — перекачивается вся склейка), а домен-шардинг на HTTP/2 даже замедляет, плодя лишние соединения. Если делаете сайт под современный протокол, эти старые оптимизации можно убирать.
HTTP/2 Server Push: почему от него отказались
В HTTP/2 была фишка под названием Server Push: сервер мог «протолкнуть» браузеру файлы заранее, не дожидаясь запроса, — например, сразу выслать CSS вместе с HTML. Звучало многообещающе, но на практике приём оказался капризным: сервер часто слал то, что у браузера уже было в кэше, тратя трафик впустую. В итоге от Server Push отказались и в новых версиях его убрали. Задачу «загрузить важное пораньше» сегодня решают аккуратнее — через подсказки в HTML вроде preload и preconnect, которые говорят браузеру, что подгрузить заранее, не навязывая лишнего.
Какого прироста ждать
Будем честны: переход на HTTP/2 — это не волшебная кнопка «сделать быстро». Выигрыш зависит от того, сколько ресурсов на странице. Если их десятки — мелких иконок, скриптов, шрифтов, — прирост заметный, потому что именно очередь HTTP/1.1 была узким местом. Если страница и так лёгкая, из пары файлов, разница будет небольшой. И HTTP/2 не отменяет других правил: тяжёлые несжатые картинки останутся тяжёлыми на любом протоколе. Поэтому версия протокола — одно из слагаемых скорости, которое включается «бесплатно» на стороне сервера, но работает в связке со сжатием, кэшем и оптимизацией картинок, а не вместо них.
Коротко
HTTP/2 и HTTP/3 — новые версии протокола передачи страниц, которые ускоряют загрузку без переделки сайта. HTTP/2 за счёт мультиплексирования отдаёт много файлов по одному соединению сразу, а HTTP/3 поверх QUIC лучше держит мобильный и нестабильный интернет. Обе версии требуют HTTPS. HTTP/2 обычно уже доступен на хостинге, HTTP/3 проще всего получить через CDN. Проверить версию можно в инструментах разработчика — ищите h2 или h3 вместо http/1.1.