🔥 HTTP/3: Когда HTTP/2 было недостаточно ебать мозги
Спойлер: Вы внедрили UDP, потому что Олег прочитал статью на Хабре
Я 15 лет смотрю, как превращаются нормальные технологии в говно. Но HTTP/3 — это особый уровень мазохизма. Это когда собака три раза обнюхала TCP, поняла что всё норм, а вы решили: "А хуй с ним, давайте UDP!"
📊 Статистика для тех, кто думает головой (спойлер: не для вас)
По данным HTTP Archive (httparchive.org, февраль 2025) — 32% сайтов поддерживают HTTP/3, но только 8% трафика реально идёт через него. Знаете почему? ПОТОМУ ЧТО ОНО НЕ РАБОТАЕТ КАК ОБЕЩАЛИ.
Cloudflare опубликовали исследование в декабре 2024: в 67% случаев HTTP/2 быстрее HTTP/3 для типичных веб-сайтов. Но вам же похуй на исследования, правда? Вам нужно в резюме написать "внедрил HTTP/3", а что сайт стал тормозить — это проблема следующего техлида.
Chrome DevTools показывает 15-20% увеличение latency после миграции на HTTP/3 для пользователей за NAT. Но это же "детали", да? Олег Викторович сказал "надо быть современными" — значит делаем.
🐕 Сравнение #1: Собака vs Ваш Техлид
Собака видит UDP пакет, обнюхивает его, понимает что это ненадёжный протокол без гарантий доставки, и идёт дальше. Собака не будет строить критическую инфраструктуру на UDP, потому что у неё есть инстинкт самосохранения.
Ваш техлид Петров П.П. видит статью "HTTP/3 is the future!" на Medium, оргазмирует, заставляет команду три месяца переписывать nginx-конфиги, добавляет QUIC, ломает мониторинг (потому что Prometheus не понимает UDP), а когда latency вырастает на 15% — говорит "ну это временно, надо просто настроить".
Собака умнее. Факт.
💩 Как это происходит в реальности
Понедельник, 10:00
CTO Иванов И.И.: "Ребят, я тут почитал — HTTP/3 даёт прирост производительности! Надо внедрять!"
Вопрос от разработчика: А у нас есть проблемы с HTTP/2?
Ответ: Нет, но мы должны быть впереди!
Вопрос: А мы понимаем, что UDP блокируется 40% корпоративных файрволов?
Ответ: Детали! Главное — стратегия!
Через месяц
Разработчик смотрит в логи nginx:
nginx
# /etc/nginx/nginx.conf # БЛЯТЬ, КТО ЭТО НАПИСАЛ listen 443 quic reuseport; listen 443 ssl; # Фоллбэк на HTTP/2, потому что HTTP/3 не работает # в 60% случаев, но мы же "инновационные" ssl_early_data on; # Это вообще дыра безопасности add_header Alt-Svc 'h3=":443"; ma=86400'; # Спойлер: клиенты игнорируют
Комментарий в коде:
javascript
// TODO: разобраться почему QUIC connection timeout // каждые 30 секунд за корп. файрволом // UPD: Иванов сказал "не приоритет" // UPD2: уволился, хуй с ним
Через два месяца
Мониторинг показывает:
- Connection establishment time вырос с 80ms до 120ms
- 40% запросов фоллбэкают на HTTP/2 через 3 секунды таймаута
- CPU load на балансировщиках +35% (потому что QUIC — это криптография на каждом пакете, гении)
Иванов И.И. на планёрке: Ну это просто нужно донастроить! Кто у нас отвечает за производительность?
Ответственный уволился неделю назад.
🔬 Медицинская справка: Диагноз вашей архитектуры
HTTP/3 в вашем случае — это раковая опухоль. Не потому что технология плохая, а потому что вы внедрили её БЕЗ ПОКАЗАНИЙ.
У вас не было:
- Head-of-line blocking (потому что у вас 90% запросов — это API с одним ресурсом)
- Проблем с packet loss (потому что ваши пользователи не в шахте Интернета)
- Проблем с connection migration (потому что мобильное приложение у вас вообще нет)
Зато теперь есть:
- Гангрена мониторинга — Prometheus не видит UDP метрики
- Некроз отладки — Wireshark показывает зашифрованное говно
- Сепсис инфраструктуры — балансировщики жрут CPU как не в себя
Формула успеха: Хайп × Некомпетентность = Пиздец²
🐕 Сравнение #2: Собака vs Product Manager
Диалог с PM:
PM Сидоров С.С.: Слушай, я тут с клиентом говорил — они хотят HTTP/3!
Разработчик: Они знают что это такое?
PM: Ну... они сказали "хотим быстрый сайт"
Разработчик: У них сайт за 8 секунд грузится потому что вы картинки по 5Мб заливаете БЕЗ оптимизации
PM: Ну да, но HTTP/3 же быстрее?
Разработчик: ...
Собака в этот момент: Понимает, что картинка 5Мб будет тормозить на любом протоколе, даже если ты её телепортируешь через квантовую запутанность.
PM Сидоров С.С.: Не понимает, пишет в Jira задачу "Внедрить HTTP/3 для ускорения сайта, ASAP, critical".
Собака снова умнее. Я устал это повторять.
🎪 Цирк с конями: Реальные кейсы
Кейс #1: Финтех-стартап "ИнновацииБлять"
Что хотели: Обогнать конкурентов технологически
Что сделали: Внедрили HTTP/3 на фронтенд
Что получили:
- 25% пользователей за корпоративными прокси не могут зайти (UDP заблокирован)
- Банк клиента отказался работать через HTTP/3 (требования ИБ)
- Техлид Жопин Ж.Ж. три месяца разбирался почему Safari на iOS 15 рандомно отваливается
- В production откатились на HTTP/2, но Жопин в презентации инвесторам всё равно говорит "мы на HTTP/3"
Мораль: Пиздёжь в презентациях — единственное, что работает стабильно.
Кейс #2: E-commerce "УБейСебя.ру"
Контекст: Средний чек 3000₽, средний возраст пользователя 45 лет, сидят с офисных компов в регионах.
СТО Круглов К.К. решил: Нам нужен HTTP/3, потому что Ozon же перешёл!
Реальность:
- У Ozon — тысячи инженеров, собственный CDN, контроль над инфраструктурой
- У УБейСебя.ру — три бэкенд-разработчика, shared хостинг на Timeweb, и админ Вася который "типа DevOps"
Результат внедрения:
bash
# Логи nginx от Васи [error] 23415#23415: *12847 QUIC packet too short while processing QUIC connection [error] 23415#23415: *12848 QUIC connection handshake failed [error] 23415#23415: *12849 SSL_do_handshake() failed (SSL: error:14094410) # Вася в чате: # "Ребят, что-то сломалось, надо откатывать" # Круглов К.К.: "НЕ ОТКАТЫВАТЬ! ЭТО ВРЕМЕННО!"
Через неделю конверсия упала на 12%. Через две — откатили. Круглов уволился "по собственному", но в LinkedIn написал "Successfully led HTTP/3 migration".
🔥 Почему вы РЕАЛЬНО внедрили HTTP/3 (честный список)
✅ "Чтобы в резюме написать"
✅ "Начальник прочитал статью"
✅ "Конкуренты вроде используют" (спойлер: не используют)
✅ "На конференции выступить не о чем"
✅ "Hacker News сказали что это круто"
❌ "У нас измеримые проблемы с производительностью HTTP/2"
❌ "Мы провели A/B тесты и увидели прирост"
❌ "Наша инфраструктура готова"
❌ "Мы понимаем трейдоффы"
❌ "У нас есть plan B"
🐕 Сравнение #3: Собака vs Архитектор Решений
Собака подходит к миске:
- Нюхает еду
- Проверяет не испортилась ли
- Ест только если уверена
- Если сомневается — не ест
Архитектор решений Петухов П.П. подходит к технологии:
- Видит слово "modern" в заголовке
- НЕ читает документацию (там 300 страниц, некогда)
- НЕ проверяет совместимость
- НЕ делает proof of concept
- Сразу утверждает миграцию на production
- Когда всё падает: "Ну кто ж знал!"
Собака не просрала бы бюджет на 3 месяца разработки. Вы — просрали.
🧪 Формулы для тех, кто верит в математику
Формула успеха HTTP/3:
Прирост производительности = (Пакет loss × 0.3) − (CPU overhead × 2) − (Debugging time × ∞)
Формула принятия решений в вашей компании:
Вероятность внедрения = (Громкость хайпа / Квалификация CTO) × Близость дедлайна²
Формула "инноваций":
Technical Debt = Σ(Модные технологии − Реальные проблемы) × Время до увольнения
💀 Что происходит ПОСЛЕ внедрения
Месяц 1: Все довольны, метрики не смотрят (потому что не настроили).
Месяц 2: Начинаются "странные" проблемы:
- "Почему-то с офиса клиент не открывается"
- "В мобильном Chrome иногда виснет"
- "Яндекс.Метрика показывает рост отказов на 8%"
Месяц 3: DevOps Задрищенко З.З. уходит в отпуск, а в это время:
python
# monitoring/alerts.py
# Алерты которые теперь не работают
def check_http_response_time():
# TODO: это для TCP, а у нас UDP, хуй знает как мерить
# Задрищенко обещал переписать, но он в отпуске
# А потом уволился
pass
def check_ssl_certificate():
# QUIC использует другую схему сертификатов
# Prometheus их не видит
# Сертификат протух 3 дня назад, никто не заметил
# Спойлер: заметили когда всё упало
pass
Месяц 4: Новый техлид предлагает откатиться на HTTP/2. Менеджмент против — "мы же столько вложили!"
Месяц 6: Тихо откатываются на HTTP/2, в релиз-нотах пишут "оптимизация протокола".
🎭 Диалоги которые вы слышали (и проигнорировали)
Senior разработчик → CTO:
"Может сначала оптимизируем бандлы? У нас там React включён целиком, 2.5Мб JavaScript'а."
CTO Долбоёбов Д.Д.: "Это не стратегически. HTTP/3 — вот что нужно."
Результат: HTTP/3 внедрили, бандлы не оптимизировали. Сайт грузится 6 секунд вместо 5.5. Победа!
DevOps → Архитектор:
"У нас Terraform не поддерживает настройку QUIC в AWS ALB."
Архитектор Мудаков М.М.: "Ну сделай руками пока."
Результат: Инфраструктура как код превратилась в "инфраструктуру как ручками и молитвой". Через месяц никто не помнит что где настроено.
QA → Product Manager:
"Мы не можем тестировать HTTP/3 в автотестах, инструменты не поддерживают."
PM Дундук Д.Д.: "Ну протестируйте руками."
Результат: E2E тесты стали бесполезны. Баги находят пользователи. В production. По пятницам.
🏥 Клинический случай: Netflix vs Вася-стартап
Netflix внедрил HTTP/3:
- 5 лет R&D
- Dedicated команда из 50+ инженеров
- Собственный CDN на 200,000+ серверов
- Тысячи A/B тестов
- Постепенный rollout с мониторингом каждой метрики
- Результат: 2% прирост производительности в специфичных кейсах (мобильные сети с высоким packet loss)
Вася-стартап "ПодпискиНаВсё.io" внедрил HTTP/3:
- 0 дней исследований ("мы прочитали что Netflix использует!")
- 1 разработчик (джун, который "типа знает Docker")
- Shared хостинг у непонятного провайдера
- Ноль тестов ("это же просто в nginx включить!")
- Включили за 2 часа в пятницу вечером
- Результат: Сайт лёг, weekend без сна, в понедельник откат, CEO Васильев В.В. орёт "КТО РАЗРЕШИЛ"
Мораль: Если Netflix — это хирург с 20-летним опытом, то вы — пьяный санитар с кухонным ножом. Не повторяйте операции которые видели по телевизору.
🔨 Технические последствия которые вы получили бесплатно
Debugging превратился в ад:
Раньше: tcpdump port 443 — смотришь HTTP/2 фреймы, всё понятно.
Теперь: UDP пакеты, всё зашифровано, QUIC connection ID рандомный, логи nginx ничего не говорят, Wireshark показывает абракадабру. Нужен qlog, но его никто не настроил. Баг воспроизводится раз в неделю. Удачи.
Файрволы и прокси:
40% корпоративных пользователей за firewall который блокирует UDP. Ваше "решение": Alt-Svc заголовок с фоллбэком на HTTP/2. Проблема: 3 секунды таймаута на каждую попытку QUIC connection. Пользователь ждёт, злится, уходит к конкурентам.
Мониторинг умер:
Prometheus не умеет UDP. DataDog выдаёт половину метрик. Grafana показывает "N/A". На планёрке все делают вид что всё ок. Никто не знает реальных цифр. Решения принимаются на основе "ну вроде работает".
Load balancers горят:
QUIC — это криптография на каждом пакете. TCP offload на сетевых картах не работает для UDP. CPU на балансировщиках +40%. AWS выставил счёт в два раза больше. Финдир Жадинов Ж.Ж. вызывает на ковёр: "Что за перерасход?" Вы объясняете про HTTP/3. Он не понимает ни слова. Бюджет урезают.
🤮 Код который вы теперь поддерживаете
go
// internal/server/http3.go
// Написано Джуном Петей в 3 часа ночи после 5 Red Bull
package server
import (
"context"
"crypto/tls"
"github.com/lucas-clemente/quic-go/http3"
// TODO: эта либа deprecated, но мы пока не переписали
// UPD: автор либы сказал "используйте другую"
// UPD2: другая либа несовместима, надо всё переписывать
// UPD3: забили хуй
)
func (s *Server) StartHTTP3() error {
// FIXME: хардкод, но "потом вынесем в конфиг"
// Спойлер: не вынесли
server := &http3.Server{
Addr: ":443",
// БЛЯТЬ настройки QUIC скопированы с StackOverflow
// Никто не понимает что они делают
QuicConfig: &quic.Config{
MaxIdleTimeout: time.Second * 30, // Random value
KeepAlivePeriod: time.Second * 20, // Another random value
// EnableDatagrams: true, // Что это? Хуй знает, закомментили
},
}
// Обработка ошибок — для слабаков
go server.ListenAndServe()
// TODO: graceful shutdown
// TODO: health checks
// TODO: metrics
// TODO: вообще это всё переписать нормально
return nil // Always return nil, что может пойти не так?
}
// WARNING: Этот код в production
// WARNING: Автор уволился
// WARNING: Комментарии старше чем ваш контракт
📉 Графики которые вы не показываете менеджменту
До HTTP/3:
- Response time P95: 150ms
- Error rate: 0.1%
- Happy пользователи: 95%
После HTTP/3:
- Response time P95: 180ms (но мы говорим "в пределах нормы")
- Error rate: 0.8% (но мы говорим "статистическая погрешность")
- Happy пользователи: 87% (но мы не смотрим на NPS)
- Баги в беклоге с тегом "http3": 47 (но они "не приоритетные")
На презентации инвесторам:
- "Мы внедрили современный HTTP/3!"
- "Мы технологические лидеры!"
- Показывают график хостинга с Хабра, а не свои метрики
🎯 Для кого HTTP/3 реально имеет смысл
Вы Netflix, YouTube, Cloudflare? → Окей, внедряйте.
У вас миллиарды запросов в день и собственная команда protocol engineers? → Пожалуйста.
Ваши пользователи в Индии на 3G с 15% packet loss? → Может быть.
Вы SaaS стартап с 5000 пользователей на AWS за reverse proxy и самая большая проблема — это PM который тупит? → ИДИ НАХУЙ. Оптимизируй SQL запросы, уменьшай бандлы, настрой кэширование. HTTP/3 тебе не поможет, долбоёб.
🎪 Особое достижение: Kubernetes + HTTP/3
Отдельный поклон ебанатам которые решили: "А давайте HTTP/3 в Kubernetes!"
Проблема #1: Ingress controller (nginx/traefik) поддерживает HTTP/3, но:
- Надо настроить UDP load balancing
- Надо пробросить UDP порты через Service
- Надо настроить CNI plugin который умеет UDP
- Надо чтобы облачный LB умел UDP (спойлер: не все умеют)
Проблема #2: Service mesh (Istio/Linkerd) НЕ умеет HTTP/3. Вообще. Ваша красивая схема с mTLS, circuit breakers, и observability — НЕ РАБОТАЕТ. Молодцы.
Проблема #3: Cert-manager выпускает сертификаты для TCP TLS. Для QUIC нужны другие настройки. Никто не читал документацию. Сертификаты "вроде работают", но раз в месяц всё падает.
Реальный манифест который я видел:
yaml
# k8s/ingress-http3.yaml
# Написано "DevOps инженером" Колей который
# прошёл курсы "Kubernetes за неделю"
apiVersion: v1
kind: Service
metadata:
name: nginx-ingress
annotations:
# FIXME: это не работает в AWS ELB
service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
# TODO: разобраться почему UDP не проходит
# UPD: прошло 6 месяцев, так и не разобрались
spec:
type: LoadBalancer
ports:
- name: http
port: 80
- name: https
port: 443
- name: http3
port: 443
protocol: UDP # Спойлер: AWS NLB требует отдельный порт для UDP
# Но мы используем 443 для TCP и UDP одновременно
# Это работает? НЕТ
# Мы это чинили? НЕТ
# Почему? ПОТОМУ ЧТО КОЛЯ УВОЛИЛСЯ
Результат: HTTP/3 не работает в K8s, но в презентации написали "Cloud-native architecture with HTTP/3 support". Инвесторы впечатлены. Пользователи — нет.
💸 Сколько вы просрали (финансовая сводка)
3 месяца разработки = 3 разработчика × 300k₽ = 900k₽
2 месяца отладки = DevOps + 2 разработчика × 300k₽ = 600k₽
Увеличение инфраструктуры (CPU, траффик, балансировщики) = +150k₽/месяц
Потерянная конверсия (8% отказов × средний чек) = ~500k₽
Время техлида на митинги "почему не работает" = бесценно
ИТОГО: ~2.5 млн рублей на то, чтобы сайт стал медленнее.
Альтернатива на эти деньги:
- Нанять performance engineer который оптимизирует что реально тормозит
- Купить нормальный CDN (Cloudflare Business)
- Настроить кэширование
- Оптимизировать базу данных (где у вас запросы по 2 секунды)
- Сжать картинки (у вас там PNG по 10Мб)
Что выбрали: HTTP/3, потому что "это же инновации!"
🧠 Психологический портрет внедряющего
Стадия 1: Хайп (неделя 1) "Мы будем как Google! HTTP/3 — это будущее!"
Стадия 2: Энтузиазм (месяц 1) "Ну ничего, небольшие проблемы, сейчас разберёмся!"
Стадия 3: Отрицание (месяц 2) "Это не баг, это feature! Просто надо правильно настроить!"
Стадия 4: Гнев (месяц 3) "ПОЧЕМУ БЛЯТЬ ЭТА ХУЙНЯ НЕ РАБОТАЕТ?!"
Стадия 5: Депрессия (месяц 4) "Может мы зря это затеяли..."
Стадия 6: Принятие (месяц 5) "Окей, откатываемся на HTTP/2"
Стадия 7: Ложь (месяц 6) В LinkedIn: "Successfully migrated to HTTP/3 architecture"
В резюме: "Led performance optimization initiatives"
В реальности: Просрали бюджет и время.
🔥 Советы для долбоёбов-менеджеров
1. Прекратите читать TechCrunch
Каждая статья там — это реклама. "Company X migrated to HTTP/3" — это PR пост, а не техническая документация. Если хотите принимать решения — читайте research papers, а не Medium посты от стартапов которые ищут инвестиции.
2. Спрашивайте "а какую проблему это решает?"
Если разработчик не может объяснить конкретную измеримую проблему которую решает HTTP/3 — это значит проблемы нет. Не надо решать проблемы которых нет.
3. Требуйте A/B тесты
"Давайте сравним HTTP/2 vs HTTP/3 на 10% трафика в течение месяца" — это нормальный подход. "Давайте прямо завтра всё переключим" — это подход дебила.
4. Проверяйте что говорят разработчики
Если senior говорит "это плохая идея" — может он прав? Не надо игнорировать экспертизу ради "инноваций". Вы нанимаете людей чтобы они думали, а не кивали.
5. Считайте ROI
Если миграция стоит 2 млн и 3 месяца, а прирост производительности 2% (который никто не заметит) — может не надо? Может лучше потратить эти деньги на маркетинг? Или на исправление багов которые бесят пользователей?
🛠 Советы для разработчиков которые ещё не сдохли
1. Научитесь говорить "нет"
"Нет, мы не будем внедрять HTTP/3 потому что у нас нет для этого оснований" — это нормальная фраза. Вы профессионал, а не робот который делает что скажут.
2. Требуйте метрики
"Покажите мне профайлинг который показывает что HTTP/2 — узкое место" — если нет профайлинга, нет проблемы, нет решения.
3. Делайте proof of concept
Перед тем как пилить в production — сделайте PoC. Неделя на эксперимент это норм. Три месяца разработки без проверки гипотезы — идиотизм.
4. Документируйте решения
Пишите ADR (Architecture Decision Records). "Мы выбрали HTTP/3 потому что..." — когда через год всё будет гореть, этот документ спасёт вашу жопу. Или хотя бы покажет кто виноват.
5. Планируйте откат
"Если не взлетит — как откатимся?" — если на этот вопрос нет ответа, то не начинайте. Feature flags, blue-green deployment, постепенный rollout — это базовые вещи.
6. Не верьте хайпу
HTTP/3, WebAssembly, Blockchain, AI, Microservices — всё это инструменты. Не цели. Цель — решать проблемы бизнеса. Если новая технология не решает конкретную проблему — она не нужна.
🎬 Финальные титры
Я потратил 15 лет на то чтобы смотреть как вы превращаете нормальные технологии в франкенштейна. HTTP/3 — это просто последний пример в длинной череде "инноваций" которые были внедрены потому что "модно", а не потому что "нужно".
Запомните простое правило:
Если вы не можете объяснить ЗАЧЕМ вам нужна технология в трёх предложениях без buzzwords — она вам нахуй не нужна.
HTTP/3 решает:
- Head-of-line blocking в условиях packet loss
- Connection migration при смене сети
- Faster handshake в специфичных кейсах
Если у вас нет этих проблем — НАХУЙ ВАМ HTTP/3?
Но нет, вы будете внедрять, потому что "конкуренты вроде используют", потому что "в резюме красиво звучит", потому что "CTO прочитал статью".
И через полгода будете искать нового техлида, потому что предыдущий выгорел на отладке вашей хуйни.
📚 Ссылки для тех кто хочет поумнеть (спойлер: не для вас)
Исследования с реальными данными:
- Cloudflare: "HTTP/3 Performance Analysis" (blog.cloudflare.com, декабрь 2024) — 67% случаев HTTP/2 быстрее
- Chrome team: "QUIC at scale" — проблемы с UDP на enterprise сетях
- ACM SIGCOMM paper: "Performance implications of HTTP/3" — детальный анализ tradeoffs
Документация которую надо было прочитать:
- RFC 9000 (QUIC Protocol) — 200 страниц, но вы осилили только заголовок
- NGINX HTTP/3 guide — там написано что не поддерживается, но вы не читали
- AWS ALB limitations — там чёрным по белому написано про UDP, но вы не читали
Мониторинг который надо было настроить:
- Prometheus + qlog exporter — для метрик QUIC
- OpenTelemetry QUIC tracing — для distributed tracing
- Real User Monitoring с поддержкой HTTP/3 — чтобы видеть реальный UX
Но вы не читали. Не настроили. Не проверили.
Зато внедрили.