El protocolo HTTP es el idioma que habla la mayor parte de la Web. Define cómo un cliente formula una solicitud y cómo un servidor responde con documentos, APIs o eventos en tiempo real.
Su diseño sin estado facilita la escalabilidad y lo vuelve ideal para servicios distribuidos. Todas las mejoras posteriores, desde el streaming hasta las aplicaciones de una sola página, siguen apoyándose en el mismo contrato básico establecido por los navegadores y servidores web.
HTTP describe un modelo cliente-servidor en el que el navegador, una aplicación móvil o un bot abre una conexión (por lo general sobre TCP) y envía un mensaje de texto estructurado. Algunas implementaciones también pueden operar sobre UDP cuando se requiere menor latencia, como ocurre con HTTP/3.
Las especificaciones actuales de HTTP son mantenidas por el IETF, mientras que organismos como el W3C definen cómo los navegadores combinan este protocolo con estándares como HTML y hojas de estilo. También se apoya en arquitecturas como REST para describir interacciones recurrentes entre clientes y servidores.
Aunque se lo considera sin estado, los desarrolladores agregan registros de sesión mediante cookies, tokens o cabeceras personalizadas que reconstruyen el contexto del usuario en cada solicitud.
Cada transacción HTTP sigue un ciclo sencillo:
Los métodos expresan la intención del cliente. Los más empleados se resumen en la siguiente tabla:
| Método | Acción | Características |
|---|---|---|
| GET | Obtiene un recurso sin modificarlo. | Debe ser seguro e idempotente; se cachea fácilmente. |
| POST | Envía datos para crear o procesar información. | No es idempotente; frecuentemente transporta formularios o JSON. |
| PUT | Reemplaza por completo un recurso en la ruta indicada. | Es idempotente y requiere cuerpo con el estado final. |
| PATCH | Modifica parcialmente un recurso existente. | Ideal para cambios incrementales con menor consumo de ancho de banda. |
| DELETE | Borra el recurso apuntado. | Debe confirmar si el borrado fue exitoso con un código 2xx o 404 si no existía. |
| OPTIONS | Consulta las capacidades del servidor para una ruta. | Es clave para negociaciones CORS y descubrimiento de APIs. |
A partir de estos métodos se construyen APIs REST, servicios SOAP y notificaciones que automatizan flujos corporativos completos.
Los mensajes poseen tres bloques principales que el cliente y el servidor deben respetar para mantener la interoperabilidad:
| Bloque | Contenido | Ejemplo |
|---|---|---|
| Línea inicial | Indica el método y la versión en solicitudes, o el código de estado en respuestas. | GET /api/v1/pedidos HTTP/1.1 / HTTP/1.1 200 OK |
| Cabeceras | Par clave-valor con datos de contexto (autenticación, caché, tipo de contenido, fechas). | Content-Type: application/json |
| Cuerpo | Opcional; contiene la representación del recurso en formatos como JSON, XML o binario. | {"total": 125.70} |
De esta combinación surgen los códigos de estado que permiten diagnosticar cada respuesta:
El fragmento siguiente muestra una solicitud y una respuesta completas para una API de ejemplo:
GET /api/v1/pedidos?estado=en-proceso HTTP/1.1
Host: api.fabrica.local
Accept: application/json
Cache-Control: no-cache
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9...
HTTP/1.1 200 OK
Date: Tue, 12 Nov 2025 18:20:01 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 148
ETag: "9db-11ee"
{
"total": 3,
"registros": [
{"id": 501, "prioridad": "alta"},
{"id": 502, "prioridad": "media"},
{"id": 503, "prioridad": "baja"}
]
}
La evolución del protocolo busca reducir latencia, mejorar la seguridad y optimizar el uso del ancho de banda. Las diferencias clave se resumen abajo:
| Versión | Innovaciones | Casos típicos |
|---|---|---|
| HTTP/1.1 | Conexiones persistentes, canalizaciones limitadas, cabeceras de control de cache mejor definidas. | Aplicaciones legadas, servidores sencillos o APIs internas. |
| HTTP/2 | Multiplexación binaria en una sola conexión TCP, compresión de cabeceras HPACK y servidor push. | Sitios con muchos recursos estáticos o APIs de alto volumen. |
| HTTP/3 | Se ejecuta sobre QUIC, evitando bloqueo de cabecera de línea y mejorando la recuperación ante pérdida de paquetes. | Servicios globales que necesitan baja latencia (streaming, juegos, videoconferencias). |
Migrar a versiones recientes suele requerir soporte del balanceador de carga y de los navegadores destino, pero trae beneficios tangibles en tiempos de carga y uso de CPU.
HTTP tradicional transporta todo en texto plano, lo que expone varios riesgos:
Estas limitaciones se resuelven combinando HTTP con TLS, tema central del siguiente capítulo dedicado a HTTPS.
Desde Windows, PowerShell permite probar métodos y analizar cabeceras sin instalar software extra:
Invoke-WebRequest -Uri "http://httpbin.org/get" `
-Method Get `
-Headers @{ "Accept" = "application/json"; "Cache-Control" = "no-cache" } `
| Select-Object StatusCode, Headers, Content
El comando anterior devuelve el código de estado, las cabeceras y el cuerpo, ayudando a verificar la coherencia de la API y la presencia de mecanismos de cache.
También es habitual automatizar consultas con Python para monitorear servicios o preparar datos de prueba:
import http.client
import json
conn = http.client.HTTPConnection("httpbin.org", 80, timeout=5)
payload = json.dumps({"usuario": "soporte", "operacion": "ping"})
conn.request("POST", "/post", body=payload, headers={"Content-Type": "application/json"})
response = conn.getresponse()
print(response.status, response.reason)
print(response.getheader("Content-Type"))
print(response.read(120).decode("utf-8"))
conn.close()
Estas rutinas se integran en pipelines de despliegue continuo para asegurar que cada endpoint responda antes de liberar una nueva versión del software.
HTTP ha demostrado ser flexible y robusto durante décadas. Comprender sus métodos, códigos y versiones permite diseñar APIs más predecibles, diagnosticar cuellos de botella y justificar la adopción de HTTP/2 o HTTP/3 cuando la aplicación lo necesite. En el próximo tema profundizaremos en HTTPS, donde el cifrado se suma al protocolo para proteger los datos que viajan por la red.