mod_http3 v0.0.72 добавлен в репозиторий CodeIT. Пакеты собраны для RHEL, CentOS, AlmaLinux, Rocky Linux и Oracle Linux 7, 8, 9 и 10, а также для Ubuntu 22.04 и 24.04.
Основные изменения:
- В Linux при использовании ListenCoresBucketsRatio родитель привязывает один SO_REUSEPORT QUIC-сокет на каждую корзину listener и один дочерний процесс обслуживает каждую, поэтому HTTP/3 обслуживает более одного дочернего процесса. Сокеты остаются привязанными при запуске и остановке дочерних процессов, так что ядро сохраняет каждого пира на одном и том же сокете.
- В Linux родитель привязывает QUIC-сокет, пока он ещё запущен от имени root, поэтому H3Port 443 работает без CAP_NET_BIND_SERVICE. Сокет остаётся привязанным при graceful restarts, а дочерние процессы наследуют его; такой сокет обслуживает по одному дочернему процессу за раз.
- Linux: QUIC-пакеты для одного пира теперь отправляются за один sendmsg с UDP_SEGMENT (GSO), а чтение использует UDP_GRO. При отсутствии поддержки со стороны ядра модуль отправляет по одному пакету за раз. Чтение потока теперь передаёт новое окно flow-control сразу, так что заблокированный клиент не ждёт.
- Добавлена директива H3MaxWindow (по умолчанию 6 MiB). Окна flow-control для загрузок клиентов теперь увеличиваются, когда клиент заполняет их в пределах нескольких round trips, до этого предела; поэтому загрузки по длинным быстрым маршрутам больше не ограничиваются фиксированным окном 1 MiB.
- Добавлена директива H3EarlyData (по умолчанию off). Возобновлённый клиент может отправить свой первый запрос как 0-RTT data и получает ответ на один round trip раньше. Перед завершением handshake выполняются только безопасные методы; остальные методы ждут его, потому что 0-RTT data может быть переотправлено (RFC 8470).
- Перемещён QUIC-транспорт с OpenSSL QUIC server на ngtcp2, при этом OpenSSL используется как TLS-backend через его QUIC TLS API. OpenSSL по-прежнему отбрасывает 0-RTT-пакеты на стороне сервера. ngtcp2 версии >= 1.25.0 стал новой зависимостью сборки (WITH_NGTCP2). Данные stream больше не копируются: nghttp3 освобождает буфер после того, как пир подтверждает его получение. H3IdleTimeout теперь всегда завершает работу с NO_ERROR; таймер бездействия QUIC работает на 2 секунды дольше и закрывает соединение без вывода сообщений.
