Las respuestas HTTP son una parte importante de la comunicación web, permitiendo a los servidores responder a las solicitudes de los clientes con los datos solicitados, información de estado y otros detalles clave. Este artículo explicará la estructura y partes de una respuesta HTTP, incluyendo la línea de estado, los encabezados y el cuerpo. Veremos los diferentes grupos de códigos de estado HTTP y sus significados, con ejemplos reales para mostrar cómo se usan. También hablaremos sobre buenas prácticas para manejar respuestas HTTP en el desarrollo web, tanto del lado del cliente como del servidor, para asegurar que clientes y servidores puedan comunicarse bien.
Puntos Clave
- Una respuesta HTTP es el mensaje que un servidor web envía de vuelta a un cliente después de recibir y procesar una solicitud HTTP.
- Los componentes clave de una respuesta HTTP incluyen la línea de estado, los encabezados y un cuerpo opcional que contiene el contenido solicitado.
- Los códigos de estado HTTP se categorizan en respuestas informativas (1xx), respuestas exitosas (2xx), mensajes de redirección (3xx), respuestas de error del cliente (4xx) y respuestas de error del servidor (5xx).
- Del lado del cliente, es fundamental verificar los códigos de estado, procesar los datos de respuesta según el encabezado Content-Type, y manejar redirecciones y errores de manera apropiada.
- Del lado del servidor, establecer los códigos de estado y encabezados correctos, proporcionar mensajes de error claros, e implementar un manejo y registro de errores adecuado son esenciales para un desarrollo web efectivo.
¿Qué Es una Respuesta HTTP?
Una respuesta HTTP es el mensaje que un servidor web envía de vuelta a un cliente después de recibir y procesar una solicitud HTTP. Entrega el resultado de la solicitud del cliente, ya sea que ese resultado sea un éxito, un fallo o algo intermedio. La respuesta incluye información de estado sobre la solicitud y también puede tener contenido en su cuerpo, como el recurso solicitado (una página web, imagen, datos JSON, etc.), o un mensaje de error.
Las respuestas HTTP son necesarias para que un cliente entienda si su solicitud fue exitosa o no y cuál fue el resultado de esa solicitud. Los navegadores web usan respuestas HTTP para saber qué contenido mostrar a los usuarios. Las APIs usan respuestas HTTP para indicar el resultado de las operaciones y para enviar datos de vuelta. La estructura y el contenido de la respuesta HTTP determinan cómo procede el cliente.
Componentes de una Respuesta HTTP
Una respuesta HTTP consta de varios componentes clave:
- Línea de Estado: La primera línea de la respuesta, que incluye la versión HTTP, un código de estado y un mensaje de estado.
- Encabezados: Pares clave-valor que proporcionan información adicional sobre la respuesta, como el tipo de contenido, longitud del contenido, directivas de caché y más.
- Cuerpo (opcional): El contenido real de la respuesta, como HTML, JSON, una imagen, etc.
Aquí hay un ejemplo de una respuesta HTTP simple:
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1234
<!DOCTYPE html>
<html>
<head>
<title>Example Page</title>
</head>
<body>
<h1>Hello, World!</h1>
<p>This is an example page.</p>
</body>
</html>
Ejemplos de la Vida Real
Navegación Web: Cuando ingresas una URL en tu navegador web, este envía una solicitud HTTP al servidor. El servidor luego responde con una respuesta HTTP que incluye el contenido HTML de la página web. Tu navegador usa esta respuesta para mostrar la página.
Interacción con API: Cuando una aplicación hace una solicitud a un endpoint de API, el servidor API responde con una respuesta HTTP. Esta respuesta a menudo incluye datos JSON que la aplicación puede usar. Por ejemplo, una aplicación del clima podría hacer una solicitud a una API del clima y recibir datos del clima actual en la respuesta.
Descarga de Archivos: Cuando haces clic en un enlace para descargar un archivo, tu navegador envía una solicitud HTTP al servidor. El servidor responde con una respuesta HTTP que incluye los datos del archivo en el cuerpo y encabezados que indican el tipo y tamaño del archivo.
Componentes de una Respuesta HTTP
Una respuesta HTTP tiene varias partes clave que proporcionan información sobre el resultado de la solicitud y entregan los datos solicitados.
Línea de Estado
La línea de estado es la primera línea de la respuesta HTTP. Incluye:
- Versión HTTP: Muestra la versión del protocolo HTTP utilizada, como HTTP/1.1 o HTTP/2.
- Código de Estado: Un número de tres dígitos que indica el resultado de la solicitud, como 200 para éxito, 404 para "no encontrado", o 500 para un error del servidor.
- Texto de Estado: Una breve descripción del código de estado, como "OK" para 200, "Not Found" para 404, o "Internal Server Error" para 500.
Aquí hay algunos códigos de estado HTTP comunes y sus significados:
| Código de Estado | Texto de Estado | Significado |
|---|---|---|
| 200 | OK | La solicitud fue exitosa y el cuerpo de la respuesta contiene los datos. |
| 201 | Created | La solicitud fue exitosa y se creó un nuevo recurso. |
| 301 | Moved Permanently | El recurso solicitado se ha movido permanentemente a una nueva URL. |
| 400 | Bad Request | El servidor no pudo entender la solicitud debido a sintaxis inválida. |
| 401 | Unauthorized | La solicitud requiere autenticación del usuario. |
| 404 | Not Found | El servidor no pudo encontrar el recurso solicitado. |
| 500 | Internal Server Error | El servidor encontró un error inesperado. |
El código de estado HTTP es parte del mensaje de respuesta. Define la clase de respuesta y juega un rol de categorización. El primer dígito del código de estado indica el tipo de respuesta:
- 1xx: Respuesta informativa
- 2xx: Éxito
- 3xx: Redirección
- 4xx: Error del cliente
- 5xx: Error del servidor
Los códigos de estado HTTP son extensibles, pero las aplicaciones HTTP no están obligadas a entender el significado de todos los códigos de estado registrados. Información adicional sobre la respuesta se puede encontrar en los campos de encabezado de la respuesta.
Encabezados de Respuesta
Después de la línea de estado están los encabezados de respuesta. Estos son pares clave-valor que dan más detalles sobre la respuesta. Algunos encabezados comunes incluyen:
- Server: El tipo de servidor que generó la respuesta, como "Apache/2.4.41 (Ubuntu)".
- Content-Type: El tipo MIME de los datos en el cuerpo de la respuesta, como "text/html" para HTML o "application/json" para JSON.
- Content-Length: El tamaño del cuerpo de la respuesta en bytes.
- Cache-Control: Directivas para mecanismos de caché, especificando si la respuesta puede ser almacenada en caché, por cuánto tiempo, etc. Por ejemplo, "max-age=3600" significa que la respuesta puede ser almacenada en caché por una hora.
- Set-Cookie: Envía cookies del servidor al cliente, como "session_id=abc123; Expires=Wed, 21 Jun 2023 07:28:00 GMT".
Línea en Blanco
Después de los encabezados, hay una línea en blanco. Esta línea vacía señala el final de la sección de encabezados de la respuesta.
Cuerpo de la Respuesta
Después de la línea en blanco está el cuerpo de la respuesta. Este contiene los datos reales que fueron solicitados, como:
Un archivo HTML para una página web:
<!DOCTYPE html> <html> <head> <title>Example Page</title> </head> <body> <h1>Welcome to the Example Page</h1> <p>This is an example of an HTML response body.</p> </body> </html>Datos JSON para una respuesta de API:
{ "name": "John Doe", "age": 30, "city": "New York" }Una imagen, video u otro archivo multimedia.
Un archivo para descargar, como un PDF o archivo ZIP.
Si la respuesta indica un error, como un código de estado 404 o 500, el cuerpo podría contener un mensaje de error proporcionando más detalles sobre el problema, como:
<!DOCTYPE html>
<html>
<head>
<title>404 Not Found</title>
</head>
<body>
<h1>404 Not Found</h1>
<p>The requested resource could not be found on this server.</p>
</body>
</html>
El cuerpo de la respuesta es opcional. Para algunas solicitudes, como una solicitud HEAD o una respuesta 204 "No Content", no habrá cuerpo.
Categorías de Códigos de Estado de Respuesta HTTP
Los códigos de estado de respuesta HTTP se dividen en cinco categorías basadas en su primer dígito. Cada categoría representa una clase diferente de respuestas.
Respuestas informativas (100-199)
Los códigos de estado en el rango 100-199 significan que el servidor ha recibido la solicitud y la está procesando. Estos códigos son respuestas. Algunos códigos de estado informativos comunes incluyen:
| Código de Estado | Descripción |
|---|---|
100 Continue |
El servidor ha recibido los encabezados de la solicitud y el cliente debe enviar el cuerpo de la solicitud. |
102 Processing |
El servidor ha recibido y está procesando la solicitud, pero aún no hay respuesta disponible. |
Ejemplo de escenario:
- Un cliente envía una solicitud POST con una carga útil grande. El servidor responde con un código de estado
100 Continuepara indicar al cliente que envíe el cuerpo de la solicitud.
Respuestas exitosas (200-299)
Los códigos de estado en el rango 200-299 significan que el servidor recibió, entendió y aceptó la solicitud. Algunos códigos de estado exitosos comunes incluyen:
| Código de Estado | Descripción |
|---|---|
200 OK |
La solicitud ha tenido éxito y el cuerpo de la respuesta tiene los datos solicitados.. |
201 Created |
La solicitud ha tenido éxito y se ha creado un nuevo recurso. Esto se usa comúnmente como respuesta a una solicitud POST. |
204 No Content |
El servidor ha cumplido con la solicitud pero no necesita devolver ningún contenido. |
Ejemplos de escenarios:
- Un cliente solicita una página web usando una solicitud GET. El servidor responde con un código de estado
200 OKy devuelve el contenido HTML. - Un cliente envía un formulario para crear un nuevo recurso usando una solicitud POST. El servidor crea el recurso y responde con un código de estado
201 Created. - Un cliente envía una solicitud DELETE para eliminar un recurso. El servidor elimina el recurso y responde con un código de estado
204 No Content.
Mensajes de redirección (300-399)
Los códigos de estado en el rango 300-399 significan que el cliente necesita realizar más acciones para completar la solicitud. La acción puede ser realizada por el agente de usuario sin interacción con el usuario. Algunos códigos de estado de redirección comunes incluyen:
| Código de Estado | Descripción |
|---|---|
301 Moved Permanently |
El recurso solicitado se le ha asignado un nuevo URI permanente y las referencias futuras deben usar uno de los URIs devueltos. |
302 Found |
El recurso solicitado está bajo un URI diferente. El cliente debe continuar usando el Request-URI para solicitudes futuras. |
304 Not Modified |
El recurso no ha sido modificado desde la versión especificada por los encabezados de la solicitud, por lo que el cliente puede continuar usando la versión en caché. |
Ejemplos de escenarios:
- Un cliente solicita un recurso que se ha movido permanentemente a una nueva URL. El servidor responde con un código de estado
301 Moved Permanentlye incluye la nueva URL en el encabezadoLocation. - Un cliente solicita un recurso que está bajo una URL diferente. El servidor responde con un código de estado
302 Founde incluye la URL temporal en el encabezadoLocation. - Un cliente envía una solicitud GET condicional con el encabezado
If-Modified-Since. Si el recurso no ha sido modificado desde la fecha especificada, el servidor responde con un código de estado304 Not Modified.
Respuestas de error del cliente (400-499)
Los códigos de estado en el rango 400-499 significan que el cliente parece haber cometido un error. Excepto cuando se responde a una solicitud HEAD, el servidor debe incluir una entidad explicando el error. Algunos códigos de estado de error del cliente comunes incluyen:
| Código de Estado | Descripción |
|---|---|
400 Bad Request |
El servidor no pudo entender la solicitud debido a una sintaxis incorrecta. |
401 Unauthorized |
La solicitud requiere autenticación del usuario. |
404 Not Found |
El servidor no ha encontrado nada que coincida con el Request-URI. |
Ejemplos de escenarios:
- Un cliente envía una solicitud con parámetros inválidos o faltantes. El servidor responde con un código de estado
400 Bad Requeste incluye un mensaje de error en el cuerpo de la respuesta. - Un cliente intenta acceder a un recurso protegido sin proporcionar autenticación válida. El servidor responde con un código de estado
401 Unauthorizedy solicita al cliente que se autentique. - Un cliente solicita un recurso que no existe en el servidor. El servidor responde con un código de estado
404 Not Found.
Respuestas de error del servidor (500-599)
Los códigos de estado en el rango 500-599 significan que el servidor sabe que ha cometido un error o no puede realizar la solicitud. Excepto cuando se responde a una solicitud HEAD, el servidor debe incluir una entidad explicando el error, y si es una condición temporal o permanente. Algunos códigos de estado de error del servidor comunes incluyen:
| Código de Estado | Descripción |
|---|---|
500 Internal Server Error |
El servidor encontró una condición inesperada que le impidió cumplir con la solicitud. |
503 Service Unavailable |
El servidor actualmente no puede manejar la solicitud debido a una sobrecarga temporal o mantenimiento del servidor. |
504 Gateway Timeout |
El servidor, mientras actuaba como gateway o proxy, no recibió una respuesta oportuna del servidor upstream que necesitaba acceder para completar la solicitud. |
Ejemplos de escenarios:
- Un cliente solicita un recurso, pero ocurre un error inesperado del lado del servidor. El servidor responde con un código de estado
500 Internal Server Errory registra el error para investigación. - Un cliente intenta acceder a un servicio que está temporalmente fuera de servicio por mantenimiento. El servidor responde con un código de estado
503 Service Unavailabley puede incluir un encabezadoRetry-Afterpara indicar cuándo se espera que el servicio esté disponible nuevamente. - Un cliente solicita un recurso que requiere que el servidor se comunique con un servidor upstream. Si el servidor upstream tarda demasiado en responder, el servidor envía un código de estado
504 Gateway Timeoutal cliente.
Para más información sobre códigos de estado HTTP, puedes consultar los siguientes recursos:
Manejo de Respuestas HTTP en el Desarrollo Web
Al crear aplicaciones web, necesitas manejar las respuestas HTTP correctamente tanto del lado del cliente como del servidor. Esto ayuda a crear una buena experiencia de usuario y ayuda con la depuración y el mantenimiento de la aplicación.
Lado del Cliente
Del lado del cliente, como en un navegador web o una aplicación móvil, necesitas:
Verificar los códigos de estado: Después de enviar una solicitud HTTP, el cliente debe verificar el código de estado HTTP de la respuesta para ver si la solicitud funcionó o no. Por ejemplo:
Código de Estado Significado 200 OK Éxito 404 Recurso solicitado no encontrado Procesar los datos de respuesta: Basándose en el código de estado y el campo de encabezado
Content-Type, el cliente necesita procesar el cuerpo de la respuesta de manera correcta. Por ejemplo:Content-Type Acción HTML El navegador lo mostrará JSON Analizar en un objeto para uso posterior Manejar redirecciones y errores: Si el código de estado significa una redirección (códigos 3xx), el cliente debe seguir la nueva URL en el encabezado
Location. Para códigos de error del cliente (4xx) y error del servidor (5xx), el cliente debe mostrar mensajes de error al usuario y tal vez reintentar la solicitud o pedirle al usuario que haga algo.
Ejemplo de manejo de un mensaje de respuesta HTTP en JavaScript usando la Fetch API:
fetch('https://api.example.com/data')
.then(response => {
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return response.json();
})
.then(data => {
console.log(data);
// Procesar los datos
})
.catch(error => {
console.error('Error:', error);
// Manejar el error
});
Lado del Servidor
Del lado del servidor, necesitas:
Establecer los códigos de estado y encabezados correctos: Al enviar una respuesta, el servidor web debe establecer el código de estado HTTP correcto para mostrar el resultado del procesamiento de la solicitud. También debe incluir campos de encabezado de respuesta, como
Content-Type, para ayudar al cliente a entender la respuesta correctamente.Proporcionar mensajes de error claros: Para respuestas de error del cliente y del servidor, el servidor debe incluir un mensaje de error claro y breve en el cuerpo de la respuesta. Esto ayuda a los desarrolladores a saber qué salió mal y cómo solucionarlo.
Implementar un buen manejo y registro de errores: En el servidor, es importante capturar y manejar errores bien. Esto significa registrar errores para análisis y depuración posterior, y no mostrar datos sensibles en mensajes de error enviados al cliente.
Ejemplo de envío de una respuesta HTTP en Node.js usando Express:
app.get('/data', (req, res) => {
try {
const data = getDataFromDatabase();
res.status(200).json(data);
} catch (error) {
console.error('Error:', error);
res.status(500).json({ error: 'Internal Server Error' });
}
});





