HTTP es la clave de la comunicación en Internet. Los métodos del protocolo HTTP permiten que los clientes envíen solicitudes a los servidores y que los servidores envíen respuestas. Cada sitio web en la World Wide Web utiliza solicitudes HTTP, por lo que es fundamental comprenderlas.
Este artículo explora el concepto de solicitudes HTTP, su estructura, los métodos más comunes y ejemplos prácticos, lo que ayuda a entender cómo funciona la web.
Una solicitud HTTP es un mensaje en el que un cliente —como un navegador web— solicita un recurso específico al host ubicado en un servidor. Los clientes utilizan URLs en las solicitudes HTTP, que indican qué recursos desean obtener del servidor.
Cada solicitud HTTP se compone de tres elementos principales:
Request line (línea de solicitud)
Headers (cabeceras)
Message body (cuerpo del mensaje)
La request line es la primera línea de una solicitud HTTP. Inicia una acción en el servidor. También indica qué método HTTP y qué versión del protocolo utiliza el cliente. Además del método, la request line incluye una URI o URL.
Ejemplo:
GET /index.html HTTP/1.1
Las cabeceras siguen justo después de la línea de solicitud. Proporcionan información adicional del cliente al servidor. Incluyen datos como el host, el user agent, preferencia de idioma, codificación, entre otros. El servidor usa esta información para identificar el navegador y el sistema operativo del cliente.
Las cabeceras HTTP son sensibles a mayúsculas y minúsculas, y tienen el formato Nombre: Valor.
Ejemplo de cabeceras HTTP:
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.9
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
El cuerpo del mensaje se utiliza para enviar datos al servidor. Es opcional: no todas las solicitudes HTTP incluyen un body. Depende del tipo de solicitud. Las solicitudes que sí incluyen un body suelen usar POST. El servidor utiliza ese contenido para procesar los datos enviados.
Una solicitud HTTP sirve para conectar el cliente con el servidor.
Los motivos pueden ser:
obtener un recurso
enviar datos
actualizar información
eliminar recursos
Estos son los métodos más utilizados:
El método GET se usa para solicitar recursos al servidor. Cada vez que un usuario abre un sitio web, el navegador envía una solicitud GET para obtener el contenido necesario.
Características:
cacheable
safe
idempotent
GET solo obtiene datos —no modifica nada en el servidor.
Cuando el cliente necesita enviar información al servidor (formularios, uploads), se usa POST.
El body contiene los datos enviados. Varias solicitudes POST idénticas pueden crear múltiples recursos en el servidor.
PUT es similar a POST, pero su propósito es diferente:
POST = crear nuevos datos
PUT = reemplazar datos existentes
El cliente debe especificar la URL del recurso que desea actualizar. PUT es idempotente: ejecutar la misma solicitud varias veces produce el mismo resultado.
DELETE permite que el cliente solicite la eliminación de un recurso específico.
Si el servidor lo elimina correctamente, devuelve una confirmación. DELETE también es idempotente.
Cuando el servidor envía una respuesta a una solicitud HTTP, esto se denomina respuesta HTTP. Al igual que una solicitud, tiene tres componentes:
Status line (línea de estado)
Headers (cabeceras)
Body (cuerpo)
Contiene:
versión de HTTP
código de estado
mensaje del estado
Incluyen información como:
fecha y hora
tipo de contenido
detalles del servidor
instrucciones de caché
El contenido real enviado por el servidor, por ejemplo:
HTML
JSON
XML
imágenes
archivos
Los códigos de estado HTTP indican el resultado de la solicitud. Cada código tiene tres cifras, y la primera indica su categoría:
|
Grupo |
Descripción |
|
1xx |
Informativo — la solicitud continúa procesándose |
|
2xx |
Éxito — la solicitud se procesó correctamente |
|
3xx |
Redirección — hace falta otra acción |
|
4xx |
Error del cliente — la solicitud es incorrecta |
|
5xx |
Error del servidor — fallo al procesar la solicitud |
Las cabeceras proporcionan información esencial para la comunicación entre cliente y servidor. Son fundamentales para el funcionamiento de la web.
Indican qué dominio está gestionando el servidor.
Cabeceras como Cache-Control o Expires definen cuánto tiempo puede almacenarse una respuesta.
Set-Cookie y Cookie ayudan a mantener sesiones y rastrear estados del usuario.
Ejemplos:
Authorization para autenticación
Content-Security-Policy para mitigar ataques XSS
Ayudan a indicar si una solicitud tuvo éxito o falló.
Todos los ejemplos están en Python usando la librería requests.
import requests
response = requests.get("https://api.example.com/data",
params={"param1": "value1", "param2": "value2"})
print(response.status_code)
print(response.json())
import requests
url = "https://api.example.com/users"
data = {
"username": "newuser",
"email": "newuser@example.com",
"password": "securepassword"
}
response = requests.post(url, json=data)
if response.status_code == 201:
print("User created successfully:", response.json())
else:
print("Error:", response.status_code, response.text)
import requests
url = "https://api.example.com/users/123"
data = {
"username": "updateduser",
"email": "updateduser@example.com"
}
response = requests.put(url, json=data)
if response.status_code == 200:
print("User updated successfully:", response.json())
else:
print("Error:", response.status_code, response.text)
import requests
url = "https://api.example.com/users/123"
response = requests.delete(url)
if response.status_code == 204:
print("User deleted successfully.")
else:
print("Error:", response.status_code, response.text)
Las solicitudes HTTP desempeñan un papel esencial en la interacción web. Por ello, es importante comprender los distintos métodos y cómo funcionan. Elegir el método adecuado garantiza una comunicación eficiente entre cliente y servidor, mejorando el rendimiento de las aplicaciones web.