Definition
HTTP versión 2 - Revisión mayor de HTTP estandarizada en 2015. Introduce tramas binarias, multiplexación de múltiples flujos sobre una conexión única, compresión de encabezados (HPACK) y capacidades de server push para mejor rendimiento.
Diagrama
sequenceDiagram
participant C as Cliente
participant S as Servidor
Note over C,S: Una conexión TCP con Multiplexación
rect rgb(200, 230, 255)
C->>S: Frame SETTINGS
S-->>C: SETTINGS ACK
par Stream 1 - HTML
C->>S: HEADERS (GET /index.html) [Stream 1]
S-->>C: HEADERS + DATA [Stream 1]
and Stream 3 - CSS
C->>S: HEADERS (GET /style.css) [Stream 3]
S-->>C: HEADERS + DATA [Stream 3]
and Stream 5 - JavaScript
C->>S: HEADERS (GET /app.js) [Stream 5]
S-->>C: HEADERS + DATA [Stream 5]
end
Note over C,S: Todos los streams multiplexados en UNA conexión
rect rgb(255, 230, 200)
Note over S,C: Server Push (proactivo)
S-->>C: PUSH_PROMISE (font.woff2)
S-->>C: DATA (font.woff2) [Stream 2]
end
end
Note over C,S: HPACK comprime encabezados repetidos
Example
Una aplicación web cargando 50 recursos puede descargarlos todos sobre una única conexión HTTP/2 simultáneamente, eliminando el bloqueo de cabecera de línea y reduciendo latencia comparado con HTTP/1.1 que necesitaría múltiples conexiones.
Analogía
Como actualizar de enviar cartas una a la vez a usar un cable de fibra óptica dedicado donde múltiples conversaciones pueden ocurrir simultáneamente, todos los mensajes están en formato binario compacto, y el remitente puede enviar proactivamente cosas que predice que necesitarás.
Code Example
// Node.js HTTP/2 server
const http2 = require('http2');
const fs = require('fs');
const server = http2.createSecureServer({
key: fs.readFileSync('server-key.pem'),
cert: fs.readFileSync('server-cert.pem')
});
server.on('stream', (stream, headers) => {
stream.respond({
'content-type': 'application/json',
':status': 200
});
stream.end(JSON.stringify({
message: 'HTTP/2 response'
}));
});
server.listen(443);
Notas de Seguridad
Requisitos Principales:
- HTTP/2 requiere TLS en la mayoría de navegadores.
- Cuidado con ataques de bomba HPACK vía compresión de encabezados.
Mejores Prácticas:
- Implementa límites adecuados de priorización de flujos para prevenir agotamiento de recursos.
- Monitorea ataques HTTP/2 Rapid Reset.
- Valida nombres y valores de campos de encabezado para prevenir inyección de encabezados..