HTTP/2 Nativo — Núcleo (Core)
Archivo: src/native_h2_core.rs (1370 líneas)
¿Por qué existe?
Implementa el núcleo del soporte HTTP/2 nativo para Forja. A diferencia del cliente HTTP/1.1 (que usa la crate ureq), HTTP/2 usa la crate h2 directamente para multiplexación de streams sobre una sola conexión TCP, con soporte completo para server push, priorización de streams, y control de flujo.
Componentes principales
| Componente | Descripción |
|---|---|
H2Connection | Mantiene el estado de una conexión HTTP/2 (tipo, destino, streams activos) |
H2Stream | Representa un stream individual dentro de una conexión HTTP/2 multiplexada |
H2Client | Cliente HTTP/2 que maneja conexiones, envía requests y recibe responses |
H2Server | Servidor HTTP/2 que acepta conexiones, enruta requests y envía responses |
API Pública (registrada en NativeRegistry)
| Función nativa | Descripción |
|---|---|
_h2_connect(host, puerto) | Conecta a un servidor HTTP/2 |
_h2_request(conn_id, metodo, path, headers, cuerpo) | Envía un request HTTP/2 y retorna el response |
_h2_server_listen(host, puerto) | Inicia un servidor HTTP/2 |
_h2_push_promise(conn_id, stream_id, path, headers) | Server push: promete un recurso al cliente |
_h2_close(conn_id) | Cierra una conexión HTTP/2 |
Características
- Multiplexación: Múltiples streams simultáneos sobre una sola conexión TCP
- Server Push: El servidor puede enviar recursos antes de que el cliente los solicite
- Control de flujo: Ventanas de flujo por conexión y por stream (WINDOW_UPDATE)
- Priorización: Árbol de dependencias entre streams (prioridad exclusiva/compartida)
- HPACK: Compresión de headers HTTP/2 usando HPACK (RFC 7541)
- Settings: Negociación de parámetros iniciales (tamaño de ventana, max concurrent streams, etc.)
Integración con TLS
El módulo src/native_h2_tls.rs (178 líneas) extiende native_h2_core con soporte TLS, permitiendo conexiones HTTP/2 seguras (h2://). Usa native-tls para manejar certificados y handshake TLS.
⚡ Rendimiento: HTTP/2 nativo está diseñado para aplicaciones de alto rendimiento. La multiplexación elimina el overhead de múltiples conexiones TCP, y el control de flujo previene que un stream lento bloquee a otros.