HTTP/1.1

Protocolos Y Transporte Security Notes Jan 6, 2025 HTTP

Definition

Hypertext Transfer Protocol versión 1.1 - La versión más ampliamente desplegada de HTTP, estandarizada en 1997. Introdujo conexiones persistentes, transferencias en fragmentos, mecanismos adicionales de control de caché y soporte de encabezado host.

Diagrama

sequenceDiagram
    participant C as Cliente
    participant S as Servidor

    Note over C,S: HTTP/1.0 - Nueva conexión por petición
    rect rgb(255, 200, 200)
        C->>S: TCP Handshake
        C->>S: GET /pagina.html
        S-->>C: 200 OK + HTML
        Note right of S: Conexión cerrada
    end
    rect rgb(255, 200, 200)
        C->>S: TCP Handshake
        C->>S: GET /estilo.css
        S-->>C: 200 OK + CSS
        Note right of S: Conexión cerrada
    end

    Note over C,S: HTTP/1.1 - Keep-Alive (misma conexión)
    rect rgb(200, 255, 200)
        C->>S: TCP Handshake
        C->>S: GET /pagina.html (Connection: keep-alive)
        S-->>C: 200 OK + HTML
        Note over C,S: Conexión permanece abierta
        C->>S: GET /estilo.css
        S-->>C: 200 OK + CSS
        C->>S: GET /script.js
        S-->>C: 200 OK + JS
        Note over C,S: Peticiones secuenciales (bloqueo de cabecera)
    end

Example

La mayoría de las APIs REST aún usan HTTP/1.1 por defecto. Una petición GET abre una conexión TCP, envía encabezados, recibe la respuesta y puede reutilizar la misma conexión para peticiones subsecuentes (keep-alive).

Analogía

Como hacer llamadas telefónicas en los 90. Marcas (estableces conexión), hablas (envías petición), escuchas la respuesta (recibes respuesta), y puedes continuar hablando sin colgar (conexión persistente) en lugar de remarcar para cada pregunta.

Code Example


# Raw HTTP/1.1 request
GET /api/users/123 HTTP/1.1
Host: api.example.com
User-Agent: MyClient/1.0
Accept: application/json
Connection: keep-alive

# Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 85
Connection: keep-alive

{"id":123,"name":"John Doe"}

Notas de Seguridad

SECURITY NOTES

Requisitos Principales:

  • Fuerza HTTPS (HTTP/1.1 sobre TLS) para todas las APIs de producción.
  • Implementa validación adecuada de encabezados para prevenir inyección de encabezados HTTP.

Mejores Prácticas:

  • Usa Connection: close para operaciones sensibles.
  • Ten en cuenta slowloris y ataques DoS similares que explotan conexiones persistentes..

Standards & RFCs