mod_http3 v0.0.72 ha sido añadido al repositorio de CodeIT. Los paquetes se han compilado para RHEL, CentOS, AlmaLinux, Rocky Linux y Oracle Linux 7, 8, 9 y 10, y para Ubuntu 22.04 y 24.04.
Cambios principales:
- En Linux, con ListenCoresBucketsRatio, el proceso padre enlaza un socket QUIC SO_REUSEPORT por bucket del listener y cada proceso hijo atiende uno, de modo que más de un proceso hijo atiende HTTP/3. Los sockets permanecen enlazados cuando los procesos hijos se inician y se detienen, así que el kernel mantiene a cada par en el mismo socket.
- En Linux, el proceso padre enlaza el socket QUIC mientras sigue ejecutándose como root, así que H3Port 443 funciona sin CAP_NET_BIND_SERVICE. El socket permanece enlazado durante graceful restarts y los procesos hijos lo heredan; lo atiende un proceso hijo a la vez.
- Linux: los paquetes QUIC hacia un mismo par ahora salen en un único sendmsg con UDP_SEGMENT (GSO), y las lecturas usan UDP_GRO. Sin soporte del kernel, el módulo envía un paquete a la vez. Una lectura de stream ahora envía la nueva ventana de flow-control de una vez, así que un cliente bloqueado no espera.
- Se añadió la directiva H3MaxWindow (por defecto 6 MiB). Las ventanas de flow-control para cargas de clientes ahora crecen cuando un cliente las completa en unos pocos round trips, hasta este límite; así, las cargas por rutas largas y rápidas ya no quedan retenidas en una ventana fija de 1 MiB.
- Se añadió la directiva H3EarlyData (por defecto off). Un cliente reanudado puede enviar su primera solicitud como 0-RTT data y obtiene la respuesta un round trip antes. Solo se ejecutan métodos seguros antes de que finalice el handshake; los demás métodos esperan, porque 0-RTT data puede reproducirse (RFC 8470).
- Se movió el transporte QUIC desde el OpenSSL QUIC server a ngtcp2, con OpenSSL como TLS backend mediante su QUIC TLS API. OpenSSL sigue descartando los paquetes 0-RTT del lado del servidor. ngtcp2 >= 1.25.0 es una nueva dependencia de compilación (WITH_NGTCP2). Ya no se copian los datos del stream: nghttp3 libera un búfer cuando el par los reconoce. H3IdleTimeout ahora siempre cierra con NO_ERROR; el temporizador de inactividad de QUIC funciona 2 segundos más y cierra en silencio.
