HTTP Status Codes
Qué significa cada código de estado HTTP, explicado en detalle para testers: propósito, usos comunes, encabezados y un ejemplo completo de solicitud y respuesta. Buscá por número o nombre, filtrá por familia y compartí el enlace directo a un código (por ejemplo #http-404).
Familia 1xx Respuestas informativas
La solicitud fue recibida y el proceso continúa.
100
Continue
Informa al cliente que el servidor recibió y está procesando los encabezados de la solicitud inicial, y que puede proceder a enviar el cuerpo de la solicitud.
Informa al cliente que el servidor recibió y está procesando los encabezados de la solicitud inicial, y que puede proceder a enviar el cuerpo de la solicitud.
Explicación
- Solicitud del cliente: El cliente envía una solicitud con el encabezado Expect: 100-continue. Esto indica que desea una confirmación de que los encabezados fueron recibidos y aceptados antes de enviar el cuerpo (especialmente útil para solicitudes grandes o críticas).
- Respuesta del servidor: Si los encabezados son aceptables, el servidor responde 100 Continue y el cliente envía el cuerpo. Si no lo son, el servidor puede responder con un código de error (4xx o 5xx) en lugar de 100 Continue.
Ejemplo de uso
POST /subir-archivo HTTP/1.1
Host: www.ejemplo.com
Content-Length: 52428800
Expect: 100-continueHTTP/1.1 100 ContinueEste mecanismo optimiza el uso de la red y de los recursos del servidor cuando el cuerpo puede ser grande: evita que el cliente envíe grandes cantidades de datos solo para que el servidor los rechace por problemas en los encabezados.
Enlace directo a este código
101
Switching Protocols
Indica que el servidor acepta cambiar el protocolo de comunicación a uno diferente, tal como lo solicitó el cliente.
Indica que el servidor acepta cambiar el protocolo de comunicación a uno diferente, tal como lo solicitó el cliente.
Explicación
- Solicitud del cliente: El cliente envía un encabezado Upgrade que especifica el nuevo protocolo al que quiere cambiar, por ejemplo de HTTP/1.1 a HTTP/2 o a WebSocket.
- Respuesta del servidor: Si está de acuerdo, responde 101 Switching Protocols e incluye un encabezado Upgrade con el protocolo al que se está cambiando.
Ejemplo de uso
GET /chat HTTP/1.1
Host: www.ejemplo.com
Upgrade: websocket
Connection: UpgradeHTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: UpgradeUn navegador puede pedir cambiar a WebSocket para una conexión más adecuada a comunicaciones en tiempo real. Si el servidor lo soporta, responde 101 y procede a cambiar de protocolo.
Enlace directo a este código
102
Processing
Respuesta informativa usada principalmente en WebDAV para indicar que el servidor recibió y está procesando la solicitud, pero todavía no hay respuesta final disponible.
Respuesta informativa usada principalmente en WebDAV para indicar que el servidor recibió y está procesando la solicitud, pero todavía no hay respuesta final disponible.
Explicación
- Propósito: Informar que la solicitud fue aceptada y el servidor está trabajando en ella. Evita que el cliente asuma que la solicitud falló por falta de respuesta inmediata.
- Uso común: Operaciones que pueden tardar bastante, como el procesamiento de archivos grandes u operaciones WebDAV complejas con múltiples suboperaciones.
- Respuesta del servidor: Mientras procesa, responde 102 para mantener informado al cliente. Al terminar, envía la respuesta final con el código apropiado (200 OK, 201 Created, 4xx, 5xx, etc.).
Ejemplo de uso
COPY /carpeta-grande/ HTTP/1.1
Host: www.ejemplo.com
Destination: /respaldo/carpeta-grande/HTTP/1.1 102 ProcessingAyuda a gestionar las expectativas del cliente durante operaciones prolongadas.
Enlace directo a este código
103
Early Hints
Permite al servidor enviar algunos encabezados de respuesta anticipadamente, antes de que la respuesta final esté lista. Mejora la carga de la página porque el navegador puede empezar a traer recursos críticos (CSS, JavaScript, imágenes) mientras se genera la respuesta completa.
Permite al servidor enviar algunos encabezados de respuesta anticipadamente, antes de que la respuesta final esté lista. Mejora la carga de la página porque el navegador puede empezar a traer recursos críticos (CSS, JavaScript, imágenes) mientras se genera la respuesta completa.
Explicación
- Propósito: Adelantar parte de los encabezados de la respuesta final para que el navegador empiece a cargar recursos mientras espera.
- Uso común: Mejorar la velocidad de carga: con los encabezados anticipados el navegador inicia conexiones y solicitudes adicionales y reduce el tiempo total.
- Respuesta del servidor: Envía 103 Early Hints con encabezados Link que indican recursos a precargar; luego sigue procesando y envía la respuesta definitiva (por ejemplo 200 OK).
Ejemplo de uso
HTTP/1.1 103 Early Hints
Link: </style.css>; rel=preload; as=style
Link: </script.js>; rel=preload; as=scriptHTTP/1.1 200 OK
Content-Type: text/html
…Permite que el navegador empiece a cargar recursos importantes antes de recibir la respuesta completa, mejorando eficiencia y velocidad.
Enlace directo a este códigoFamilia 2xx Respuestas satisfactorias
La solicitud se recibió, entendió y aceptó correctamente.
200
OK
La solicitud del cliente fue exitosa y el servidor devolvió la información solicitada. Es uno de los códigos más comunes e indica que todo funcionó correctamente.
La solicitud del cliente fue exitosa y el servidor devolvió la información solicitada. Es uno de los códigos más comunes e indica que todo funcionó correctamente.
Explicación
- Propósito: Indica que la solicitud fue recibida, comprendida y aceptada con éxito.
- Uso común
- Páginas web: Cuando un navegador pide una página y el servidor la encuentra y la entrega correctamente.
- APIs: Indica que la operación solicitada, como obtener datos o completar una acción, se realizó correctamente.
- Contenido de la respuesta: Generalmente incluye el contenido solicitado en el cuerpo: HTML, JSON, XML, un archivo, etc.
Ejemplo de uso
GET /index.html HTTP/1.1
Host: www.ejemplo.comHTTP/1.1 200 OK
Content-Type: text/html
<!DOCTYPE html>
<html>
<head><title>Página de ejemplo</title></head>
<body><h1>¡Hola, mundo!</h1></body>
</html>Señal de que la solicitud fue procesada con éxito y la respuesta incluye el contenido solicitado.
Enlace directo a este código
201
Created
La solicitud se completó con éxito y resultó en la creación de un nuevo recurso.
La solicitud se completó con éxito y resultó en la creación de un nuevo recurso.
Explicación
- Propósito: Informa que la solicitud se procesó correctamente y que se creó un nuevo recurso en el servidor como resultado.
- Uso común
- APIs RESTful: Operaciones de creación, como un POST para crear un usuario, una entrada de blog o un ítem en una base de datos.
- Subida de archivos: Cuando un archivo se carga y se guarda correctamente.
- Contenido de la respuesta
- Localización del nuevo recurso: Suele incluir un encabezado Location con la URL del recurso creado.
- Representación del recurso: A veces incluye también una representación del recurso en el cuerpo.
Ejemplo de uso
POST /usuarios HTTP/1.1
Host: www.ejemplo.com
Content-Type: application/json
{
"nombre": "Juan Pérez",
"correo": "[email protected]"
}HTTP/1.1 201 Created
Location: /usuarios/123
Content-Type: application/json
{
"id": 123,
"nombre": "Juan Pérez",
"correo": "[email protected]"
}La solicitud fue exitosa y se creó un nuevo recurso. La respuesta incluye su ubicación y, opcionalmente, una representación.
Enlace directo a este código
202
Accepted
La solicitud fue recibida y aceptada para su procesamiento, pero el procesamiento no se completó aún. No garantiza que termine con éxito, solo que está en proceso.
La solicitud fue recibida y aceptada para su procesamiento, pero el procesamiento no se completó aún. No garantiza que termine con éxito, solo que está en proceso.
Explicación
- Propósito: Informar que la solicitud fue aceptada y que el servidor la procesará en un momento posterior. Útil para operaciones que llevan tiempo.
- Uso común
- Procesamiento en segundo plano: Operaciones asíncronas: procesar un archivo grande, iniciar una importación de datos, ejecutar una tarea en background.
- APIs: Sistemas con operaciones prolongadas: generación de informes, envío de correos masivos, scripts complejos.
- Contenido de la respuesta
- Información adicional: Puede incluir el estado actual o un enlace donde consultar el progreso o el resultado.
- Encabezados: Puede incluir Location con la URL donde consultar el estado de la operación pendiente.
Ejemplo de uso
POST /procesar-datos HTTP/1.1
Host: www.ejemplo.com
Content-Type: application/json
{ "dataset": "datos_grandes.csv" }HTTP/1.1 202 Accepted
Location: /estado-proceso/123
Content-Type: application/json
{
"mensaje": "La solicitud fue aceptada y está siendo procesada.",
"id_proceso": 123,
"estado": "pendiente"
}Señala que la operación se maneja de manera asíncrona y que el cliente puede verificar el estado más adelante.
Enlace directo a este código
203
Non-Authoritative Information
La solicitud se procesó correctamente, pero la información devuelta puede provenir de una copia local o de un tercero en lugar del servidor de origen: el contenido pudo ser modificado por un intermediario (como un proxy) antes de entregarse.
La solicitud se procesó correctamente, pero la información devuelta puede provenir de una copia local o de un tercero en lugar del servidor de origen: el contenido pudo ser modificado por un intermediario (como un proxy) antes de entregarse.
Explicación
- Propósito: Informar que la respuesta es válida pero no está autorizada por la fuente original; pudo ser modificada por un proxy u otro intermediario.
- Uso común
- Servidores proxy: Un proxy intermedio responde con contenido que modificó o validó.
- Cachés: El contenido se sirve desde una caché intermedia que pudo alterar la información.
- Contenido de la respuesta: Incluye los datos solicitados, pero el cliente debe tener en cuenta que no provienen directamente del servidor de origen y pueden no ser una representación exacta.
Ejemplo de uso
GET /datos HTTP/1.1
Host: www.ejemplo.comHTTP/1.1 203 Non-Authoritative Information
Content-Type: application/json
{ "datos": "Estos datos pueden haber sido modificados por el proxy." }La solicitud se completó, pero la información pudo ser modificada por un intermediario y no proviene directamente de la fuente original.
Enlace directo a este código
204
No Content
La solicitud se procesó correctamente y el servidor no necesita devolver contenido en el cuerpo. Útil cuando no hace falta enviar datos al cliente después de una operación exitosa.
La solicitud se procesó correctamente y el servidor no necesita devolver contenido en el cuerpo. Útil cuando no hace falta enviar datos al cliente después de una operación exitosa.
Explicación
- Propósito: Informar que la solicitud se procesó con éxito pero no hay contenido para enviar. Adecuado para operaciones como actualizar con PUT o realizar acciones con DELETE.
- Uso común
- Operaciones de actualización: Después de un PUT para actualizar un recurso.
- Eliminación de recursos: Después de un DELETE.
- Operaciones sin respuesta requerida: Cuando la acción se completa y no hace falta devolver datos.
- Contenido de la respuesta: No hay cuerpo. Puede incluir encabezados relevantes como Content-Location o ETag.
Ejemplo de uso
PUT /usuarios/123 HTTP/1.1
Host: www.ejemplo.com
Content-Type: application/json
{ "nombre": "Juan Pérez Actualizado" }HTTP/1.1 204 No ContentLa acción se completó y no es necesario enviar datos adicionales al cliente.
Enlace directo a este código
205
Reset Content
La solicitud se procesó con éxito y el servidor quiere que el agente de usuario (el navegador) restablezca la vista que causó la solicitud: por ejemplo, limpiar un formulario o volver la interfaz a su estado original.
La solicitud se procesó con éxito y el servidor quiere que el agente de usuario (el navegador) restablezca la vista que causó la solicitud: por ejemplo, limpiar un formulario o volver la interfaz a su estado original.
Explicación
- Propósito: Informar que la solicitud se completó y que el cliente debe reiniciar la vista o la interfaz. Especialmente útil después de enviar formularios.
- Uso común
- Formularios web: Tras enviar un formulario, el servidor responde 205 para indicar que debe limpiarse.
- Interfaz de usuario: Para indicar que cualquier entrada o estado temporal debe volver a su valor predeterminado.
- Contenido de la respuesta: El cuerpo debe estar vacío. Puede incluir encabezados relevantes.
Ejemplo de uso
POST /submit-form HTTP/1.1
Host: www.ejemplo.com
Content-Type: application/x-www-form-urlencoded
nombre=Juan&apellido=PérezHTTP/1.1 205 Reset ContentGarantiza que la interfaz vuelva a un estado predeterminado después de una operación exitosa.
Enlace directo a este código
206
Partial Content
El servidor cumplió una solicitud GET pero devolvió solo una parte del recurso. Se usa cuando el cliente pide una porción específica de un archivo con encabezados de rango, para descargas por partes o transmisión de medios.
El servidor cumplió una solicitud GET pero devolvió solo una parte del recurso. Se usa cuando el cliente pide una porción específica de un archivo con encabezados de rango, para descargas por partes o transmisión de medios.
Explicación
- Propósito: Informar que la solicitud de un rango específico fue exitosa y que solo se envió esa parte del contenido.
- Uso común
- Descargas interrumpidas y reanudables: Permite reanudar descargas pidiendo solo las partes que faltan.
- Transmisión de video y audio: El cliente pide partes específicas del archivo para reproducir en tiempo real.
- Encabezados relacionados
- Range: El cliente especifica el rango de bytes que desea recibir.
- Content-Range: El servidor indica qué parte del contenido está devolviendo.
Ejemplo de uso
GET /video.mp4 HTTP/1.1
Host: www.ejemplo.com
Range: bytes=0-1023HTTP/1.1 206 Partial Content
Content-Type: video/mp4
Content-Range: bytes 0-1023/10000
[primeros 1024 bytes del archivo de video]Especialmente útil para descargas grandes, interrumpidas o transmisiones de medios: el cliente recibe partes del recurso en lugar de descargarlo completo.
Enlace directo a este código
207
Multi-Status
Específico de WebDAV. La respuesta contiene información sobre múltiples recursos y cada uno puede tener un código de estado diferente.
Específico de WebDAV. La respuesta contiene información sobre múltiples recursos y cada uno puede tener un código de estado diferente.
Explicación
- Propósito: Informar que la solicitud afectó a varios recursos y proporcionar un código de estado separado para cada uno. Útil cuando una sola solicitud WebDAV afecta varios archivos o directorios.
- Uso común
- Operaciones WebDAV: Respuestas a PROPFIND, PROPPATCH y MOVE, que pueden involucrar múltiples recursos.
- Resultados detallados: Permite indicar el éxito o fallo de cada recurso individualmente.
- Formato de la respuesta: Un documento XML con elementos <response>, <href> y <status> para cada recurso.
Ejemplo de uso
PROPFIND /mi-carpeta/ HTTP/1.1
Host: www.ejemplo.com
Depth: 1HTTP/1.1 207 Multi-Status
Content-Type: application/xml
<?xml version="1.0" encoding="utf-8"?>
<multistatus xmlns="DAV:">
<response>
<href>/mi-carpeta/archivo1</href>
<propstat>
<prop><displayname>archivo1</displayname></prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/mi-carpeta/archivo2</href>
<propstat>
<prop><displayname>archivo2</displayname></prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
</multistatus>Permite que el cliente entienda cómo fue afectado cada recurso individual por la solicitud.
Enlace directo a este código
208
Already Reported
Específico de WebDAV. Se usa dentro de un elemento DAV:propstat para evitar enumerar repetidamente los miembros internos de colecciones con múltiples enlaces.
Específico de WebDAV. Se usa dentro de un elemento DAV:propstat para evitar enumerar repetidamente los miembros internos de colecciones con múltiples enlaces.
Explicación
- Propósito: Indicar que los miembros de una colección (por ejemplo, archivos de un directorio) ya fueron enumerados en una respuesta anterior, evitando duplicar la información.
- Uso común
- Operaciones WebDAV: Respuestas a PROPFIND y otras solicitudes que enumeran recursos en colecciones.
- Prevención de duplicados: Evita la redundancia cuando un recurso ya fue listado en el mismo conjunto de resultados.
- Formato de la respuesta: Aparece dentro de una respuesta 207 Multi-Status, indicando que el recurso ya fue reportado.
Ejemplo de uso
PROPFIND /mi-carpeta/ HTTP/1.1
Host: www.ejemplo.com
Depth: 1HTTP/1.1 207 Multi-Status
Content-Type: application/xml
<?xml version="1.0" encoding="utf-8"?>
<multistatus xmlns="DAV:">
<response>
<href>/mi-carpeta/archivo1</href>
<propstat><status>HTTP/1.1 200 OK</status></propstat>
</response>
<response>
<href>/mi-carpeta/archivo2</href>
<propstat><status>HTTP/1.1 208 Already Reported</status></propstat>
</response>
</multistatus>Evita la duplicación de información en el mismo conjunto de respuestas.
Enlace directo a este código
214
Transformation Appliedno estándar
No forma parte del conjunto estándar de códigos HTTP definidos por la IETF. Existe alguna referencia en el contexto de extensiones a HTTP, pero no es un código estándar. Se puede ofrecer una interpretación a partir del nombre.
No forma parte del conjunto estándar de códigos HTTP definidos por la IETF. Existe alguna referencia en el contexto de extensiones a HTTP, pero no es un código estándar. Se puede ofrecer una interpretación a partir del nombre.
Explicación
- Propósito: Sugiere que se aplicó una transformación a la respuesta: el servidor modificó el contenido de alguna manera antes de enviarlo.
- Uso hipotético
- Transformaciones de contenido: Indicar que el contenido fue comprimido, redimensionado, traducido o transformado de otra forma.
- Intermediarios o proxies: Situaciones donde un proxy o servidor intermedio modifica el contenido antes de entregarlo.
Como no es parte de los estándares oficiales, su uso no está formalmente definido y puede variar según la implementación. Si trabajás con un sistema que lo usa, consultá su documentación.
Enlace directo a este código
226
IM Used
Parte de HTTP/1.1 según el RFC 3229, relacionado con las manipulaciones de instancia (Instance Manipulations, IM).
Parte de HTTP/1.1 según el RFC 3229, relacionado con las manipulaciones de instancia (Instance Manipulations, IM).
Explicación
- Propósito: Indica que el servidor cumplió una solicitud GET y que la respuesta es el resultado de una o más manipulaciones de instancia aplicadas a la versión actual del recurso.
- Uso común
- Eficiencia en transferencias: Permite enviar solo los cambios (deltas) desde una versión conocida del recurso en lugar del recurso completo.
- Metodología: Se logra con las manipulaciones especificadas en el encabezado IM de la solicitud; los clientes sincronizan sus copias de forma eficiente.
- Contexto de uso: Actualizaciones incrementales en aplicaciones donde los recursos cambian con frecuencia y los clientes ya tienen una copia: reduce ancho de banda y tiempo de transferencia.
Ejemplo de uso
GET /mi-recurso HTTP/1.1
Host: www.ejemplo.com
IM: deltaHTTP/1.1 226 IM Used
Content-Type: application/json
IM: delta
{
"cambios": [
{ "op": "replace", "path": "/nombre", "value": "Nuevo Nombre" },
{ "op": "add", "path": "/atributos/nuevo_atributo", "value": "valor" }
]
}Reduce la cantidad de datos transferidos al enviar solo las diferencias respecto de una versión conocida del recurso.
Enlace directo a este códigoFamilia 3xx Redirecciones
Hace falta otra acción del cliente para completar la solicitud.
300
Multiple Choices
La solicitud tiene más de una posible respuesta y el usuario o el agente de usuario debe elegir una. El servidor ofrece varias opciones para que el cliente seleccione la más adecuada.
La solicitud tiene más de una posible respuesta y el usuario o el agente de usuario debe elegir una. El servidor ofrece varias opciones para que el cliente seleccione la más adecuada.
Explicación
- Propósito: Informar que hay múltiples representaciones del recurso y permitir elegir una. Útil cuando un recurso tiene distintos formatos o versiones.
- Uso común
- Diferentes formatos: El recurso está disponible en JSON, XML o HTML y el servidor ofrece las opciones.
- Variantes de idioma: El recurso tiene versiones en varios idiomas y el cliente elige el preferido.
- Contenido de la respuesta
- Lista de opciones: Generalmente incluye enlaces a las distintas opciones.
- Encabezado Location: Puede incluir una URI preferida.
Ejemplo de uso
GET /mi-recurso HTTP/1.1
Host: www.ejemplo.comHTTP/1.1 300 Multiple Choices
Content-Type: text/html
<html><body>
<h1>Multiple Choices</h1>
<ul>
<li><a href="/mi-recurso.json">/mi-recurso.json</a> (JSON)</li>
<li><a href="/mi-recurso.xml">/mi-recurso.xml</a> (XML)</li>
<li><a href="/mi-recurso.html">/mi-recurso.html</a> (HTML)</li>
</ul>
</body></html>Hay múltiples respuestas posibles y el cliente debe elegir cuál usar; la respuesta provee las opciones disponibles.
Enlace directo a este código
301
Moved Permanently
El recurso solicitado se movió de forma permanente a una nueva URL. Todas las futuras solicitudes deben hacerse a la nueva URL.
El recurso solicitado se movió de forma permanente a una nueva URL. Todas las futuras solicitudes deben hacerse a la nueva URL.
Explicación
- Propósito: Informar que el recurso ya no está en la URL actual y fue trasladado permanentemente. El cliente debe actualizar enlaces y marcadores.
- Uso común
- Redireccionamiento permanente: Cuando cambia la estructura de URLs de un sitio, se cambia de dominio o se reorganizan rutas.
- SEO: Mantiene el ranking en buscadores transfiriendo el valor del enlace (link juice) de la URL antigua a la nueva.
- Contenido de la respuesta
- Encabezado Location: Contiene la nueva URL.
- Opcionalmente, un cuerpo: Puede incluir un mensaje que informe sobre la redirección.
Ejemplo de uso
GET /antigua-ruta HTTP/1.1
Host: www.ejemplo.comHTTP/1.1 301 Moved Permanently
Location: https://www.ejemplo.com/nueva-ruta
Content-Type: text/html
<html><body>
<h1>El recurso fue movido permanentemente</h1>
<p>La nueva URL es <a href="https://www.ejemplo.com/nueva-ruta">https://www.ejemplo.com/nueva-ruta</a></p>
</body></html>Clientes y buscadores deben actualizar sus referencias a la URL antigua para usar la nueva en el futuro.
Enlace directo a este código
302
Found
El recurso se encuentra temporalmente en una URL diferente. El cliente debe seguir usando la URL original en futuras solicitudes, porque la redirección es temporal.
El recurso se encuentra temporalmente en una URL diferente. El cliente debe seguir usando la URL original en futuras solicitudes, porque la redirección es temporal.
Explicación
- Propósito: Informar que el recurso está temporalmente en otra ubicación y que debe seguirse la redirección; la URL original sigue vigente.
- Uso común
- Redireccionamiento temporal: Durante mantenimiento del sitio o para pruebas A/B.
- Movimientos temporales: Recursos movidos temporalmente que se espera que regresen a su ubicación original.
- Contenido de la respuesta
- Encabezado Location: Contiene la URL temporal.
- Opcionalmente, un cuerpo: Puede incluir un mensaje sobre la redirección.
Ejemplo de uso
GET /ruta-original HTTP/1.1
Host: www.ejemplo.comHTTP/1.1 302 Found
Location: https://www.ejemplo.com/ruta-temporal
Content-Type: text/html
<html><body>
<h1>El recurso se movió temporalmente</h1>
<p>Visitá la URL temporal: <a href="https://www.ejemplo.com/ruta-temporal">https://www.ejemplo.com/ruta-temporal</a></p>
</body></html>El cliente sigue la redirección pero continúa usando la URL original para futuras solicitudes.
Enlace directo a este código
303
See Other
El recurso se encuentra en otra URL y debe recuperarse con una solicitud GET. Se usa típicamente después de procesar un POST, para que el cliente obtenga la información desde la nueva URL con GET.
El recurso se encuentra en otra URL y debe recuperarse con una solicitud GET. Se usa típicamente después de procesar un POST, para que el cliente obtenga la información desde la nueva URL con GET.
Explicación
- Propósito: Útil para redirecciones después de operaciones que no son seguras (como POST), donde la respuesta debe recuperarse con GET.
- Uso común
- Redireccionamiento después de un POST: Tras procesar un formulario, redirigir a una página de confirmación con GET.
- Prevención de reenvíos: Evita que el formulario se reenvíe si el usuario refresca la página.
- Contenido de la respuesta
- Encabezado Location: La URL a la que debe redirigirse el cliente.
- Opcionalmente, un cuerpo: Un mensaje que informe sobre la redirección.
Ejemplo de uso
POST /submit-form HTTP/1.1
Host: www.ejemplo.com
Content-Type: application/x-www-form-urlencoded
nombre=Juan&apellido=PérezHTTP/1.1 303 See Other
Location: https://www.ejemplo.com/confirmacion
Content-Type: text/html
<html><body>
<h1>Formulario enviado</h1>
<p>Redirigiendo a la página de confirmación…</p>
</body></html>Especialmente útil tras un POST para redirigir al cliente a una nueva página sin riesgo de reenvío del formulario.
Enlace directo a este código
304
Not Modified
El recurso no fue modificado desde la última vez que se accedió. El servidor no necesita enviar el contenido de nuevo: el cliente puede usar la versión en su caché.
El recurso no fue modificado desde la última vez que se accedió. El servidor no necesita enviar el contenido de nuevo: el cliente puede usar la versión en su caché.
Explicación
- Propósito: Permitir que el cliente use su copia en caché en lugar de descargar el recurso completo, reduciendo ancho de banda y mejorando el rendimiento.
- Uso común
- Control de caché: Junto con encabezados condicionales como If-Modified-Since o If-None-Match.
- Eficiencia: Evita transferencias innecesarias y acelera la carga de páginas.
- Encabezados relacionados
- If-Modified-Since: El cliente envía la fecha de la última modificación conocida; si no cambió, el servidor responde 304.
- If-None-Match: El cliente envía un ETag; si coincide con el actual, el servidor responde 304.
Ejemplo de uso
GET /mi-recurso HTTP/1.1
Host: www.ejemplo.com
If-Modified-Since: Wed, 21 Oct 2020 07:28:00 GMTHTTP/1.1 304 Not ModifiedEl cliente usa su copia en caché, mejorando eficiencia y rendimiento al evitar transferencias de datos innecesarias.
Enlace directo a este código
305
Use Proxyno estándar
El recurso debe accederse a través del proxy especificado. Fue declarado obsoleto por preocupaciones de seguridad y ya no es ampliamente utilizado.
El recurso debe accederse a través del proxy especificado. Fue declarado obsoleto por preocupaciones de seguridad y ya no es ampliamente utilizado.
Explicación
- Propósito: Informar que debe usarse un proxy específico, cuya dirección va en el encabezado Location.
- Uso común
- Redireccionamiento a través de un proxy: Pudo usarse para implementar controles de acceso o redirigir el tráfico por un punto de control.
- Declarado obsoleto: Por problemas de seguridad y exposición de detalles de configuración, los navegadores modernos dejaron de soportarlo.
- Contenido de la respuesta: El encabezado Location contiene la URL del proxy que debe utilizarse.
Ejemplo de uso
GET /recurso HTTP/1.1
Host: www.ejemplo.comHTTP/1.1 305 Use Proxy
Location: http://proxy.ejemplo.com:8080Obsoleto: su uso ya no es recomendado ni soportado por la mayoría de los navegadores.
Enlace directo a este código
307
Temporary Redirect
El recurso está temporalmente en otra URL y el cliente debe repetir la solicitud a esa URL con el mismo método HTTP. A diferencia de 302, garantiza que el método y el cuerpo se mantienen.
El recurso está temporalmente en otra URL y el cliente debe repetir la solicitud a esa URL con el mismo método HTTP. A diferencia de 302, garantiza que el método y el cuerpo se mantienen.
Explicación
- Propósito: Redirección temporal que preserva el método original (GET, POST, etc.).
- Uso común
- Redireccionamiento temporal: Redirigir temporalmente a una nueva URL sin cambiar el método.
- Preservación del método: Asegura que un POST no se convierta en GET, manteniendo la integridad de los datos y la intención de la solicitud.
- Contenido de la respuesta
- Encabezado Location: La URL temporal.
- Opcionalmente, un cuerpo: Un mensaje sobre la redirección.
Ejemplo de uso
POST /submit-form HTTP/1.1
Host: www.ejemplo.com
Content-Type: application/x-www-form-urlencoded
nombre=Juan&apellido=PérezHTTP/1.1 307 Temporary Redirect
Location: https://www.ejemplo.com/formulario-temporal
Content-Type: text/html
<html><body>
<h1>Formulario enviado</h1>
<p>Redirigiendo temporalmente a la nueva URL…</p>
</body></html>Útil para redirecciones temporales donde es importante preservar el método de la solicitud original.
Enlace directo a este código
308
Permanent Redirect
El recurso se movió permanentemente a una nueva URL y el cliente debe usarla en todas las solicitudes futuras. A diferencia de 301, garantiza que el método y el cuerpo se mantienen.
El recurso se movió permanentemente a una nueva URL y el cliente debe usarla en todas las solicitudes futuras. A diferencia de 301, garantiza que el método y el cuerpo se mantienen.
Explicación
- Propósito: Informar del traslado permanente y asegurar que el método original se mantenga. El cliente debe actualizar enlaces y marcadores.
- Uso común
- Redireccionamiento permanente: Cuando un recurso se movió de manera definitiva.
- Preservación del método: Asegura que un POST no se convierta en GET.
- Contenido de la respuesta
- Encabezado Location: La nueva URL permanente.
- Opcionalmente, un cuerpo: Un mensaje sobre la redirección.
Ejemplo de uso
POST /submit-form HTTP/1.1
Host: www.ejemplo.com
Content-Type: application/x-www-form-urlencoded
nombre=Juan&apellido=PérezHTTP/1.1 308 Permanent Redirect
Location: https://www.ejemplo.com/nueva-ubicacion
Content-Type: text/html
<html><body>
<h1>Recurso movido permanentemente</h1>
<p>La nueva URL es <a href="https://www.ejemplo.com/nueva-ubicacion">https://www.ejemplo.com/nueva-ubicacion</a></p>
</body></html>Útil para redirecciones permanentes donde es importante preservar el método de la solicitud original.
Enlace directo a este códigoFamilia 4xx Errores del cliente
La solicitud tiene un problema: sintaxis, permisos o recurso inexistente.
400
Bad Request
El servidor no puede o no procesará la solicitud debido a un error del cliente: sintaxis incorrecta, solicitud mal formada o datos inválidos.
El servidor no puede o no procesará la solicitud debido a un error del cliente: sintaxis incorrecta, solicitud mal formada o datos inválidos.
Explicación
- Propósito: Informar que la solicitud no se puede procesar por un problema con los datos enviados: errores de sintaxis, parámetros incorrectos o datos no válidos.
- Uso común
- Sintaxis incorrecta: La solicitud contiene errores y el servidor no puede interpretarla.
- Datos inválidos: Los datos no cumplen con los requisitos del servidor.
- Parámetros faltantes: No se incluyen todos los parámetros necesarios o son incorrectos.
- Contenido de la respuesta
- Mensaje de error: Puede explicar la naturaleza del error.
- Detalles del error: En aplicaciones complejas, detalles adicionales para corregir la solicitud.
Ejemplo de uso
GET /mi-recurso HTTP/1.1
Host: www.ejemplo.com
Content-Type: application/x-www-form-urlencoded
nombre=Juan&apellidoHTTP/1.1 400 Bad Request
Content-Type: text/html
<html><body>
<h1>Solicitud incorrecta</h1>
<p>La solicitud no se pudo procesar debido a un error de sintaxis.</p>
</body></html>Señala errores de sintaxis, parámetros faltantes o datos no válidos; puede incluir un mensaje que ayude al cliente a corregir la solicitud.
Enlace directo a este código
401
Unauthorized
La solicitud no se aplicó porque carece de credenciales de autenticación válidas para el recurso. El cliente debe autenticarse para obtener la respuesta.
La solicitud no se aplicó porque carece de credenciales de autenticación válidas para el recurso. El cliente debe autenticarse para obtener la respuesta.
Explicación
- Propósito: Informar que la solicitud no puede proceder porque no se proporcionaron credenciales o las proporcionadas no son válidas.
- Uso común
- Autenticación requerida: El recurso requiere autenticación y el cliente no envió ninguna credencial.
- Credenciales inválidas: Las credenciales son incorrectas o expiraron.
- Contenido de la respuesta: Incluye el encabezado WWW-Authenticate con el método de autenticación que debe usar el cliente: usuario y contraseña, token u otro tipo de credencial.
Ejemplo de uso
GET /recurso-protegido HTTP/1.1
Host: www.ejemplo.comHTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="Acceso a recursos protegidos"
Content-Type: text/html
<html><body>
<h1>Autenticación requerida</h1>
<p>Debe autenticarse para acceder a este recurso.</p>
</body></html>La respuesta incluye WWW-Authenticate, que especifica cómo debe autenticarse el cliente para acceder al recurso.
Enlace directo a este código
402
Payment Required
Código reservado para uso futuro. No se utiliza en las aplicaciones y servicios web convencionales. Su propósito original era indicar que el acceso requiere un pago, pero no se estandarizó ni implementó ampliamente.
Código reservado para uso futuro. No se utiliza en las aplicaciones y servicios web convencionales. Su propósito original era indicar que el acceso requiere un pago, pero no se estandarizó ni implementó ampliamente.
Explicación
- Propósito previsto: Informar que la solicitud no puede procesarse hasta que se realice un pago.
- Uso común
- Actualmente no en uso: No hay una implementación estándar; no lo usan los navegadores ni las APIs convencionales.
- Aplicaciones futuras: Podría usarse para suscripciones, servicios premium o contenido pago.
- Contenido de la respuesta: Cualquier implementación sería específica del proveedor y podría incluir información sobre cómo pagar.
Ejemplo de uso
GET /contenido-premium HTTP/1.1
Host: www.ejemplo.comHTTP/1.1 402 Payment Required
Content-Type: text/html
<html><body>
<h1>Pago requerido</h1>
<p>Para acceder a este contenido, debe realizar un pago. Visite <a href="https://www.ejemplo.com/pago">nuestro portal de pagos</a>.</p>
</body></html>Reservado para uso futuro; actualmente no hay una implementación estándar.
Enlace directo a este código
403
Forbidden
El servidor comprendió la solicitud pero se niega a autorizarla. A diferencia de 401, que implica falta de credenciales, 403 indica que el servidor sabe quién es el cliente pero el acceso está prohibido.
El servidor comprendió la solicitud pero se niega a autorizarla. A diferencia de 401, que implica falta de credenciales, 403 indica que el servidor sabe quién es el cliente pero el acceso está prohibido.
Explicación
- Propósito: Informar que, aunque la solicitud fue comprendida y no requiere autenticación adicional, el servidor se niega a cumplirla por restricciones de acceso.
- Uso común
- Permisos insuficientes: Un usuario sin privilegios de administrador intenta acceder a una página de administración.
- Recursos protegidos: Acceso prohibido por configuraciones del servidor o políticas de seguridad.
- Bloqueo de IP: Políticas de control de acceso basadas en la dirección IP.
- Contenido de la respuesta
- Mensaje de error: Puede explicar la razón de la prohibición.
- Detalles adicionales: Cómo obtener acceso o a quién contactar.
Ejemplo de uso
GET /admin HTTP/1.1
Host: www.ejemplo.comHTTP/1.1 403 Forbidden
Content-Type: text/html
<html><body>
<h1>Acceso denegado</h1>
<p>No tiene permisos para acceder a este recurso.</p>
</body></html>Puede deberse a permisos insuficientes, políticas de seguridad o configuraciones del servidor que prohíben el acceso.
Enlace directo a este código
404
Not Found
El servidor no puede encontrar el recurso solicitado: no existe una página o archivo correspondiente a la URL pedida por el cliente.
El servidor no puede encontrar el recurso solicitado: no existe una página o archivo correspondiente a la URL pedida por el cliente.
Explicación
- Propósito: Informar que el recurso no está disponible: la URL es incorrecta, el recurso fue eliminado o nunca existió.
- Uso común
- URL incorrecta: La URL no coincide con ningún recurso.
- Recurso eliminado: Fue eliminado o movido a otra ubicación.
- Error tipográfico: El cliente escribió mal la URL.
- Contenido de la respuesta
- Página de error personalizada: Muchos sitios ofrecen información adicional, enlaces útiles o un buscador.
- Mensaje básico: Sin página personalizada, un mensaje indicando que la página no fue encontrada.
Ejemplo de uso
GET /pagina-inexistente HTTP/1.1
Host: www.ejemplo.comHTTP/1.1 404 Not Found
Content-Type: text/html
<html><body>
<h1>404 No encontrado</h1>
<p>La página que está buscando no existe.</p>
</body></html>La URL no corresponde a ningún recurso disponible; la respuesta puede incluir una página de error que ayude al usuario a orientarse.
Enlace directo a este código
405
Method Not Allowed
El método de la solicitud es conocido por el servidor, pero no está permitido para el recurso solicitado. El servidor reconoce el método (GET, POST, PUT, DELETE…) pero no permite su uso en esa URL.
El método de la solicitud es conocido por el servidor, pero no está permitido para el recurso solicitado. El servidor reconoce el método (GET, POST, PUT, DELETE…) pero no permite su uso en esa URL.
Explicación
- Propósito: Informar que el método HTTP usado no está permitido para el recurso, por restricciones del servidor o configuración del recurso.
- Uso común
- Restricciones del recurso: Una API permite GET y POST pero no DELETE.
- Restricciones del servidor: Políticas que limitan los métodos permitidos en ciertas rutas.
- Contenido de la respuesta
- Encabezado Allow: Debe enumerar los métodos permitidos para el recurso.
- Mensaje de error: Puede explicar el error.
Ejemplo de uso
DELETE /recurso HTTP/1.1
Host: www.ejemplo.comHTTP/1.1 405 Method Not Allowed
Allow: GET, POST
Content-Type: text/html
<html><body>
<h1>Método no permitido</h1>
<p>El método DELETE no está permitido para este recurso. Los métodos permitidos son GET y POST.</p>
</body></html>La respuesta debe incluir el encabezado Allow con los métodos permitidos.
Enlace directo a este código
406
Not Acceptable
El servidor no puede generar una respuesta aceptable según los encabezados Accept de la solicitud: no puede satisfacer las restricciones de contenido del cliente.
El servidor no puede generar una respuesta aceptable según los encabezados Accept de la solicitud: no puede satisfacer las restricciones de contenido del cliente.
Explicación
- Propósito: Informar que el servidor no puede responder en ninguno de los formatos indicados en Accept: tipos de contenido, codificaciones, idiomas, etc.
- Uso común
- Negociación de contenido: El cliente solo acepta JSON o XML y el servidor no puede devolver esos formatos.
- Restricciones del cliente: Encabezados Accept, Accept-Encoding, Accept-Language y Accept-Charset.
- Contenido de la respuesta
- Mensaje de error: Puede explicar por qué no se puede cumplir.
- Opciones alternativas: Información sobre los formatos disponibles.
Ejemplo de uso
GET /recurso HTTP/1.1
Host: www.ejemplo.com
Accept: application/jsonHTTP/1.1 406 Not Acceptable
Content-Type: text/html
<html><body>
<h1>Contenido no aceptable</h1>
<p>El servidor no puede generar una respuesta en el formato solicitado (application/json).</p>
</body></html>El servidor no puede cumplir con las restricciones de contenido del cliente; puede informar los formatos alternativos disponibles.
Enlace directo a este código
407
Proxy Authentication Required
El cliente debe autenticarse con un proxy antes de que la solicitud pueda procesarse. Similar a 401, pero aplicado a la autenticación que exige un servidor proxy.
El cliente debe autenticarse con un proxy antes de que la solicitud pueda procesarse. Similar a 401, pero aplicado a la autenticación que exige un servidor proxy.
Explicación
- Propósito: Informar que el proxy necesita credenciales de autenticación antes de permitir el acceso al recurso.
- Uso común
- Autenticación del proxy: Entornos corporativos o redes que usan proxies para gestionar el acceso a Internet.
- Configuración de red: El proxy exige credenciales válidas antes de permitir el tráfico.
- Contenido de la respuesta
- Encabezado Proxy-Authenticate: Especifica el método de autenticación que debe usar el cliente con el proxy.
- Mensaje de error: Puede explicar que se requiere autenticación con el proxy.
Ejemplo de uso
GET /recurso HTTP/1.1
Host: www.ejemplo.comHTTP/1.1 407 Proxy Authentication Required
Proxy-Authenticate: Basic realm="Proxy"
Content-Type: text/html
<html><body>
<h1>Autenticación del proxy requerida</h1>
<p>Debe autenticarse con el proxy para acceder al recurso solicitado.</p>
</body></html>La respuesta incluye Proxy-Authenticate con el método de autenticación requerido por el proxy.
Enlace directo a este código
408
Request Timeout
El servidor no recibió una solicitud completa dentro del tiempo que estaba preparado para esperar.
El servidor no recibió una solicitud completa dentro del tiempo que estaba preparado para esperar.
Explicación
- Propósito: Informar que el servidor cerró la conexión porque la solicitud no se completó en un tiempo razonable, por una conexión lenta o porque el cliente dejó de enviar datos.
- Uso común
- Conexiones lentas: El cliente no puede enviar la solicitud completa a tiempo por lentitud o interrupciones.
- Tiempo de espera del servidor: El servidor tiene un timeout configurado y la solicitud no se completó dentro de ese tiempo.
- Contenido de la respuesta: Puede incluir un mensaje indicando que el tiempo de espera expiró.
Ejemplo de uso
GET /recurso HTTP/1.1
Host: www.ejemplo.com
(esperando datos adicionales que nunca llegan)HTTP/1.1 408 Request Timeout
Content-Type: text/html
<html><body>
<h1>Tiempo de espera expirado</h1>
<p>El servidor no recibió la solicitud completa dentro del tiempo esperado.</p>
</body></html>Puede deberse a conexiones lentas, interrupciones o cualquier causa que impida completar la solicitud en el tiempo esperado.
Enlace directo a este código
409
Conflict
La solicitud no pudo completarse por un conflicto con el estado actual del recurso. Se usa cuando el servidor detecta conflictos con el recurso que se intenta modificar o actualizar.
La solicitud no pudo completarse por un conflicto con el estado actual del recurso. Se usa cuando el servidor detecta conflictos con el recurso que se intenta modificar o actualizar.
Explicación
- Propósito: Informar que hay un conflicto con el estado actual del recurso: una modificación concurrente o datos que generan un conflicto.
- Uso común
- Conflictos de edición: Varios usuarios modifican el mismo recurso al mismo tiempo.
- Conflictos de estado: Actualizar un recurso con datos desactualizados.
- Contenido de la respuesta
- Mensaje de error: Describe el conflicto y, si es posible, cómo resolverlo.
- Detalles del conflicto: Versiones del recurso, sugerencias de actualización, etc.
Ejemplo de uso
PUT /recurso HTTP/1.1
Host: www.ejemplo.com
Content-Type: application/json
{
"id": 1,
"nombre": "Recurso Actualizado",
"version": 1
}HTTP/1.1 409 Conflict
Content-Type: application/json
{
"mensaje": "Conflicto al intentar actualizar el recurso.",
"detalles": "El recurso fue modificado por otro usuario. Obtenga la última versión e intente de nuevo."
}Típico en edición concurrente; la respuesta puede detallar la naturaleza del conflicto y cómo resolverlo.
Enlace directo a este código
410
Gone
El recurso ya no está disponible y no hay una dirección de reenvío conocida. El servidor sabe que el recurso no volverá a estar disponible.
El recurso ya no está disponible y no hay una dirección de reenvío conocida. El servidor sabe que el recurso no volverá a estar disponible.
Explicación
- Propósito: Informar que el recurso fue eliminado permanentemente y no hay nueva URL. A diferencia de 404, que no hace suposiciones sobre la permanencia.
- Uso común
- Eliminación permanente: Recursos eliminados que no volverán a ponerse en línea.
- Contenido expirado: Artículos, documentos o páginas retiradas que no serán reemplazadas.
- Contenido de la respuesta: Puede incluir un mensaje explicando que el recurso fue eliminado.
Ejemplo de uso
GET /recurso-antiguo HTTP/1.1
Host: www.ejemplo.comHTTP/1.1 410 Gone
Content-Type: text/html
<html><body>
<h1>Recurso eliminado</h1>
<p>El recurso ya no está disponible y no hay una dirección de reenvío conocida.</p>
</body></html>Señala la eliminación definitiva y ayuda a clientes y buscadores a entender que no deben seguir pidiendo ese recurso.
Enlace directo a este código
411
Length Required
El servidor rechaza la solicitud porque no incluye el encabezado Content-Length, necesario para procesarla.
El servidor rechaza la solicitud porque no incluye el encabezado Content-Length, necesario para procesarla.
Explicación
- Propósito: Informar que falta Content-Length, que especifica la longitud del cuerpo de la solicitud.
- Uso común: Algunos servidores necesitan conocer la longitud exacta del contenido para manejarlo adecuadamente, sobre todo en POST o PUT.
- Contenido de la respuesta: Puede incluir un mensaje indicando que se requiere Content-Length.
Ejemplo de uso
POST /upload HTTP/1.1
Host: www.ejemplo.com
Content-Type: application/json
{
"nombre": "Juan Pérez",
"archivo": "datos.bin"
}HTTP/1.1 411 Length Required
Content-Type: text/html
<html><body>
<h1>Longitud requerida</h1>
<p>El encabezado Content-Length es necesario para procesar esta solicitud.</p>
</body></html>Asegura que el servidor tenga la información necesaria para manejar el contenido de la solicitud.
Enlace directo a este código
412
Precondition Failed
Una o más condiciones de los encabezados de la solicitud evaluaron como falsas en el servidor, que por lo tanto no cumplirá la solicitud.
Una o más condiciones de los encabezados de la solicitud evaluaron como falsas en el servidor, que por lo tanto no cumplirá la solicitud.
Explicación
- Propósito: Informar que no se cumplen las condiciones de encabezados como If-Match, If-None-Match, If-Modified-Since, If-Unmodified-Since o If-Range.
- Uso común
- Encabezados condicionales: Asegurarse de que un recurso no fue modificado desde una fecha o que coincide con un ETag.
- Control de concurrencia: Evitar conflictos cuando varios clientes modifican un recurso al mismo tiempo.
- Contenido de la respuesta: Puede explicar por qué las condiciones no se cumplieron.
Ejemplo de uso
PUT /recurso HTTP/1.1
Host: www.ejemplo.com
If-Match: "etag12345"
Content-Type: application/json
{ "nombre": "Recurso Actualizado" }HTTP/1.1 412 Precondition Failed
Content-Type: text/html
<html><body>
<h1>Precondición fallida</h1>
<p>La condición especificada en el encabezado If-Match no se cumplió.</p>
</body></html>Permite manejar solicitudes condicionales y evitar conflictos donde se aplican reglas de concurrencia o control de versiones.
Enlace directo a este código
413
Payload Too Large
La solicitud es más grande de lo que el servidor está dispuesto o es capaz de procesar, por lo que fue rechazada.
La solicitud es más grande de lo que el servidor está dispuesto o es capaz de procesar, por lo que fue rechazada.
Explicación
- Propósito: Informar que el cuerpo de la solicitud excede el tamaño que el servidor puede manejar.
- Uso común
- Tamaño de carga excesivo: Cargar un archivo o enviar datos que superan el límite.
- Configuración del servidor: Límite máximo configurado para el cuerpo de las solicitudes.
- Contenido de la respuesta
- Mensaje de error: Puede explicar que el cuerpo es demasiado grande.
- Encabezado Retry-After (opcional): Puede indicar cuándo reintentar o dar instrucciones adicionales.
Ejemplo de uso
POST /subir-archivo HTTP/1.1
Host: www.ejemplo.com
Content-Type: application/octet-stream
Content-Length: 52428800
[datos del archivo]HTTP/1.1 413 Payload Too Large
Content-Type: text/html
<html><body>
<h1>La carga es demasiado grande</h1>
<p>El servidor no puede procesar la solicitud porque el cuerpo es demasiado grande.</p>
</body></html>El tamaño de los datos enviados excede los límites del servidor.
Enlace directo a este código
414
URI Too Long
La URI de la solicitud es demasiado larga para que el servidor la procese: excede el límite que está dispuesto a manejar.
La URI de la solicitud es demasiado larga para que el servidor la procese: excede el límite que está dispuesto a manejar.
Explicación
- Propósito: Informar que la URI es demasiado larga, por ejemplo por parámetros de consulta excesivos.
- Uso común
- URIs generadas automáticamente: Sistemas que generan URIs con grandes cantidades de datos o parámetros.
- Errores de configuración: Una aplicación cliente construye una URI que excede los límites.
- Contenido de la respuesta: Puede incluir un mensaje explicando que la URI es demasiado larga.
Ejemplo de uso
GET /buscar?parametro1=valor1¶metro2=valor2&…¶metro1000=valor1000 HTTP/1.1
Host: www.ejemplo.comHTTP/1.1 414 URI Too Long
Content-Type: text/html
<html><body>
<h1>URI demasiado larga</h1>
<p>La URI proporcionada es demasiado larga para ser procesada por el servidor.</p>
</body></html>También conocido como Request-URI Too Long. La longitud de la URI excede los límites permitidos.
Enlace directo a este código
415
Unsupported Media Type
El servidor rechaza la solicitud porque el tipo de contenido del cuerpo no es soportado para el recurso solicitado.
El servidor rechaza la solicitud porque el tipo de contenido del cuerpo no es soportado para el recurso solicitado.
Explicación
- Propósito: Informar que el tipo de medio del cuerpo no es compatible con el recurso.
- Uso común
- Tipo de contenido no soportado: Enviar XML a un endpoint que solo acepta JSON.
- Content-Type incorrecto: El encabezado especifica un tipo que el servidor no puede manejar.
- Contenido de la respuesta: Puede explicar que el tipo de contenido no es soportado.
Ejemplo de uso
POST /api/recurso HTTP/1.1
Host: www.ejemplo.com
Content-Type: application/xml
<recurso>
<nombre>Ejemplo</nombre>
</recurso>HTTP/1.1 415 Unsupported Media Type
Content-Type: text/html
<html><body>
<h1>Tipo de contenido no soportado</h1>
<p>El servidor no puede procesar la solicitud porque el tipo de contenido 'application/xml' no es soportado.</p>
</body></html>El tipo de medio del cuerpo no es compatible con el recurso; la respuesta puede ayudar a corregir el problema.
Enlace directo a este código
416
Range Not Satisfiable
El servidor no puede cumplir el rango especificado en el encabezado Range: el rango solicitado no es válido para el tamaño del recurso.
El servidor no puede cumplir el rango especificado en el encabezado Range: el rango solicitado no es válido para el tamaño del recurso.
Explicación
- Propósito: Informar que no se puede proporcionar la parte del recurso solicitada porque el rango no es válido.
- Uso común
- Rango fuera de los límites: El recurso tiene 1000 bytes y el cliente pide del 1500 al 2000.
- Recursos inexistentes: No se puede cumplir ningún rango de un recurso que no existe.
- Contenido de la respuesta: Debe incluir Content-Range con la forma bytes */[tamaño-del-recurso], indicando el tamaño total.
Ejemplo de uso
GET /archivo.txt HTTP/1.1
Host: www.ejemplo.com
Range: bytes=1500-2000HTTP/1.1 416 Range Not Satisfiable
Content-Range: bytes */1000
Content-Type: text/html
<html><body>
<h1>Rango no satisfactorio</h1>
<p>El rango solicitado no es válido para el tamaño del recurso.</p>
</body></html>La respuesta incluye Content-Range con el tamaño del recurso para que el cliente ajuste su solicitud.
Enlace directo a este código
417
Expectation Failed
El servidor no puede cumplir con los requisitos del encabezado Expect de la solicitud.
El servidor no puede cumplir con los requisitos del encabezado Expect de la solicitud.
Explicación
- Propósito: Informar que la expectativa indicada en Expect no puede ser satisfecha.
- Uso común
- Encabezado Expect: Expect: 100-continue indica que el cliente espera un 100 Continue antes de enviar el cuerpo.
- Expectativas no cumplidas: Si el servidor no puede satisfacerla, responde 417.
- Contenido de la respuesta: Puede explicar que la expectativa no puede cumplirse.
Ejemplo de uso
POST /api/recurso HTTP/1.1
Host: www.ejemplo.com
Expect: 100-continue
Content-Type: application/json
Content-Length: 348
{
"nombre": "Juan Pérez",
"correo": "[email protected]"
}HTTP/1.1 417 Expectation Failed
Content-Type: text/html
<html><body>
<h1>Expectativa no cumplida</h1>
<p>El servidor no puede cumplir con la expectativa especificada en el encabezado Expect.</p>
</body></html>Indica al cliente que debe ajustar su solicitud porque la expectativa no puede satisfacerse.
Enlace directo a este código
418
I'm a Teapotno estándar
Referencia humorística al Hyper Text Coffee Pot Control Protocol (HTCPCP), definido en el RFC 2324 en 1998 como broma del Día de los Inocentes. No se usa en aplicaciones reales, pero se mantiene como curiosidad histórica.
Referencia humorística al Hyper Text Coffee Pot Control Protocol (HTCPCP), definido en el RFC 2324 en 1998 como broma del Día de los Inocentes. No se usa en aplicaciones reales, pero se mantiene como curiosidad histórica.
Explicación
- Propósito: Indicar que el servidor es una tetera y no puede preparar café. Es una broma sin propósito práctico.
- Uso común
- Humor: Guiño a la especificación del RFC 2324.
- Ejemplos de aprendizaje: Se menciona para ilustrar cómo funcionan los códigos de estado.
- Contenido de la respuesta: Puede incluir un mensaje humorístico.
Ejemplo de uso
BREW /coffee HTTP/1.1
Host: www.ejemplo.comHTTP/1.1 418 I'm a Teapot
Content-Type: text/html
<html><body>
<h1>Soy una tetera</h1>
<p>No puedo preparar café porque soy una tetera.</p>
</body></html>Una curiosidad histórica del mundo de los protocolos web.
Enlace directo a este código
420
Enhance Your Calmno estándar
Código no estándar que usaba la API de Twitter para indicar rate limiting: el cliente envió demasiadas solicitudes en poco tiempo y debe reducir la velocidad. Fue reemplazado por el estándar 429 Too Many Requests.
Código no estándar que usaba la API de Twitter para indicar rate limiting: el cliente envió demasiadas solicitudes en poco tiempo y debe reducir la velocidad. Fue reemplazado por el estándar 429 Too Many Requests.
Explicación
- Propósito: Informar que se excedió el límite de solicitudes y que debe reducirse la frecuencia para evitar un bloqueo.
- Uso común
- Rate limiting: Controlar la carga limitando la cantidad de solicitudes por período.
- API de Twitter: Usado por Twitter antes de adoptar 429.
- Contenido de la respuesta
- Mensaje de error: Puede pedir reducir la frecuencia.
- Retry-After (opcional): Cuándo volver a intentar.
Ejemplo de uso
GET /api/tweets HTTP/1.1
Host: api.twitter.comHTTP/1.1 420 Enhance Your Calm
Content-Type: application/json
{ "error": "You are being rate limited. Enhance your calm and try again later." }No es parte de la especificación oficial y fue reemplazado por 429.
Enlace directo a este código
421
Misdirected Request
La solicitud fue enviada a un servidor que no puede producir una respuesta adecuada: no tiene autoridad sobre el recurso o no está configurado para manejarla.
La solicitud fue enviada a un servidor que no puede producir una respuesta adecuada: no tiene autoridad sobre el recurso o no está configurado para manejarla.
Explicación
- Propósito: Informar que la solicitud llegó a un servidor incorrecto, no autorizado o no configurado para manejarla.
- Uso común
- Configuraciones de servidor: Entornos con múltiples servidores donde uno no es el adecuado para la solicitud.
- Redirección incorrecta: Balanceadores de carga o proxies que dirigen la solicitud a un servidor que no puede manejarla.
- Contenido de la respuesta
- Mensaje de error: Puede explicar que la solicitud fue mal dirigida.
- Posibles soluciones: A dónde dirigir la solicitud o cómo corregir el problema.
Ejemplo de uso
GET /recurso HTTP/1.1
Host: www.ejemplo.comHTTP/1.1 421 Misdirected Request
Content-Type: text/html
<html><body>
<h1>Solicitud mal dirigida</h1>
<p>La solicitud fue enviada a un servidor que no puede producir una respuesta adecuada.</p>
</body></html>La solicitud necesita dirigirse a un servidor diferente que pueda responder adecuadamente.
Enlace directo a este código
422
Unprocessable Entity
El servidor entiende el tipo de contenido y la sintaxis es correcta, pero no puede procesar las instrucciones por errores semánticos. Nace en WebDAV pero se usa en muchos otros contextos.
El servidor entiende el tipo de contenido y la sintaxis es correcta, pero no puede procesar las instrucciones por errores semánticos. Nace en WebDAV pero se usa en muchos otros contextos.
Explicación
- Propósito: Informar que la solicitud fue recibida y entendida, pero no puede procesarse por problemas semánticos en el contenido.
- Uso común
- Errores de validación: Campos obligatorios faltantes, valores fuera de rango o formatos incorrectos.
- Inconsistencias semánticas: Datos internamente inconsistentes o sin sentido lógico según las reglas del servidor.
- Contenido de la respuesta
- Mensaje de error: Describe el error y qué partes de la solicitud lo causaron.
- Detalles de validación: Detalles específicos para que el cliente corrija los errores.
Ejemplo de uso
POST /usuarios HTTP/1.1
Host: www.ejemplo.com
Content-Type: application/json
{
"nombre": "Juan",
"correo": "correo invalido"
}HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
{
"errores": {
"correo": "El formato del correo electrónico no es válido."
}
}La respuesta suele describir el problema con detalle para que el cliente corrija los errores y reenvíe la solicitud.
Enlace directo a este código
423
Locked
Propio de WebDAV. El recurso al que se intenta acceder está bloqueado y no puede modificarse.
Propio de WebDAV. El recurso al que se intenta acceder está bloqueado y no puede modificarse.
Explicación
- Propósito: Informar que el recurso está bloqueado hasta que se libere el bloqueo, evitando conflictos en operaciones concurrentes.
- Uso común
- Operaciones WebDAV: Un recurso bloqueado por una operación WebDAV para evitar modificaciones concurrentes.
- Control de concurrencia: Coordinar el acceso para evitar cambios simultáneos inconsistentes.
- Contenido de la respuesta: Puede explicar que el recurso está bloqueado y dar detalles del bloqueo.
Ejemplo de uso
PROPPATCH /archivo HTTP/1.1
Host: www.ejemplo.com
Content-Type: application/xml
<?xml version="1.0" encoding="utf-8"?>
<propertyupdate xmlns="DAV:">
<set><prop><author>Juan Pérez</author></prop></set>
</propertyupdate>HTTP/1.1 423 Locked
Content-Type: text/html
<html><body>
<h1>Recurso bloqueado</h1>
<p>El recurso solicitado está bloqueado y no puede ser modificado.</p>
</body></html>Se usa en WebDAV para gestionar el acceso concurrente a recursos y evitar conflictos.
Enlace directo a este código
424
Failed Dependency
Propio de WebDAV. La solicitud falló debido a la falla de una solicitud previa de la cual dependía.
Propio de WebDAV. La solicitud falló debido a la falla de una solicitud previa de la cual dependía.
Explicación
- Propósito: Informar que la solicitud no puede completarse porque depende de otra operación que falló.
- Uso común
- Operaciones WebDAV: Una solicitud en una secuencia depende de la finalización exitosa de una anterior que falló.
- Transacciones dependientes: El fallo de una operación impide la ejecución de las siguientes.
- Contenido de la respuesta: Puede explicar que la solicitud falló por una dependencia fallida.
Ejemplo de uso
LOCK /archivo HTTP/1.1
Host: www.ejemplo.com
Content-Type: application/xml
<?xml version="1.0" encoding="utf-8"?>
<lockinfo xmlns="DAV:">
<lockscope><exclusive/></lockscope>
<locktype><write/></locktype>
<owner><href>https://www.ejemplo.com/usuario</href></owner>
</lockinfo>
→ HTTP/1.1 403 ForbiddenPROPPATCH /archivo HTTP/1.1
Host: www.ejemplo.com
Content-Type: application/xml
…
HTTP/1.1 424 Failed Dependency
Content-Type: text/html
<html><body>
<h1>Dependencia fallida</h1>
<p>La solicitud no se pudo completar porque depende de otra solicitud que falló.</p>
</body></html>Gestiona operaciones interdependientes que requieren la finalización exitosa de solicitudes previas.
Enlace directo a este código
425
Too Early
El servidor no está dispuesto a procesar una solicitud que podría repetirse. Forma parte de la estrategia para evitar repeticiones prematuras con TLS 1.3 y su extensión 0-RTT (Zero Round Trip Time).
El servidor no está dispuesto a procesar una solicitud que podría repetirse. Forma parte de la estrategia para evitar repeticiones prematuras con TLS 1.3 y su extensión 0-RTT (Zero Round Trip Time).
Explicación
- Propósito: Informar que procesar la solicitud ahora tiene riesgos de seguridad, como la repetición de solicitudes antes de establecer completamente una conexión segura.
- Uso común
- TLS 0-RTT: Permite enviar datos antes de que la conexión esté completamente establecida; mejora la latencia pero introduce riesgo de ataques de repetición.
- Seguridad: El servidor evita procesar prematuramente para no exponer vulnerabilidades.
- Contenido de la respuesta: Puede explicar que la solicitud es demasiado temprana.
Ejemplo de uso
POST /api/recurso HTTP/1.1
Host: www.ejemplo.com
Early-Data: 1
{ "data": "example" }HTTP/1.1 425 Too Early
Content-Type: text/html
<html><body>
<h1>Solicitud demasiado temprana</h1>
<p>El servidor no está dispuesto a procesar la solicitud en este momento. Intente de nuevo más tarde.</p>
</body></html>Previene la repetición prematura de solicitudes cuando aún no se estableció completamente una conexión segura.
Enlace directo a este código
426
Upgrade Required
El servidor se niega a procesar la solicitud con el protocolo actual, pero lo hará si el cliente cambia a otro protocolo.
El servidor se niega a procesar la solicitud con el protocolo actual, pero lo hará si el cliente cambia a otro protocolo.
Explicación
- Propósito: Informar que el cliente debe actualizar a un protocolo diferente, necesario cuando el servidor requiere capacidades de una versión más reciente.
- Uso común
- Actualización de protocolo: Cambiar de HTTP/1.1 a HTTP/2 o a WebSocket.
- Mejora de seguridad: Forzar un protocolo más seguro o eficiente.
- Contenido de la respuesta
- Encabezado Upgrade: Especifica el o los protocolos a los que debe cambiar el cliente.
- Mensaje de error: Puede explicar que se requiere la actualización.
Ejemplo de uso
GET /recurso HTTP/1.1
Host: www.ejemplo.comHTTP/1.1 426 Upgrade Required
Upgrade: HTTP/2.0
Content-Type: text/html
<html><body>
<h1>Actualización requerida</h1>
<p>El servidor requiere que actualice su protocolo a HTTP/2.0 para procesar esta solicitud.</p>
</body></html>Mejora la compatibilidad, seguridad o eficiencia de la comunicación entre cliente y servidor.
Enlace directo a este código
428
Precondition Required
El servidor requiere que la solicitud sea condicional: debe incluir encabezados como If-Match, If-None-Match, If-Modified-Since, If-Unmodified-Since o If-Range. El objetivo es evitar conflictos de edición cuando varios usuarios modifican el mismo recurso.
El servidor requiere que la solicitud sea condicional: debe incluir encabezados como If-Match, If-None-Match, If-Modified-Since, If-Unmodified-Since o If-Range. El objetivo es evitar conflictos de edición cuando varios usuarios modifican el mismo recurso.
Explicación
- Propósito
- Evitar conflictos: Asegurar que las modificaciones se realicen solo si el recurso no cambió desde la última vez que el cliente lo vio.
- Consistencia de datos: Garantizar que el cliente tenga una copia actual antes de modificar.
- Uso común
- Control de concurrencia optimista: APIs RESTful donde varios clientes modifican el mismo recurso.
- Validaciones condicionales: Cuando es crucial procesar solo si ciertas condiciones son verdaderas.
- Contenido de la respuesta: Puede explicar que se requiere una condición previa y sugerir los encabezados a usar.
Ejemplo de uso
PUT /recurso/123 HTTP/1.1
Host: www.ejemplo.com
Content-Type: application/json
{ "nombre": "Recurso Actualizado" }HTTP/1.1 428 Precondition Required
Content-Type: text/html
<html><body>
<h1>Precondition Required</h1>
<p>Debe realizar esta solicitud con una condición previa. Utilice el encabezado If-Match para asegurarse de que el recurso no fue modificado.</p>
</body></html>Exige encabezados condicionales para evitar conflictos y asegurar la consistencia cuando varios clientes modifican el mismo recurso.
Enlace directo a este código
429
Too Many Requests
El cliente envió demasiadas solicitudes en un período de tiempo dado y el servidor rechaza la solicitud para evitar la sobrecarga. Implementa políticas de rate limiting y protege los recursos contra abuso.
El cliente envió demasiadas solicitudes en un período de tiempo dado y el servidor rechaza la solicitud para evitar la sobrecarga. Implementa políticas de rate limiting y protege los recursos contra abuso.
Explicación
- Propósito
- Rate limiting: Controlar la cantidad de solicitudes por período para evitar sobrecarga.
- Protección contra abuso: Prevenir el uso excesivo que afecte el rendimiento y la disponibilidad para otros usuarios.
- Uso común
- APIs: Limitar solicitudes por minuto, hora o día.
- Servidores web: Gestionar tráfico y prevenir ataques de denegación de servicio (DoS).
- Contenido de la respuesta
- Mensaje de error: Explica que se enviaron demasiadas solicitudes y cuándo reintentar.
- Retry-After (opcional): Cuánto tiempo esperar antes de volver a intentar.
Ejemplo de uso
GET /api/recurso HTTP/1.1
Host: www.ejemplo.comHTTP/1.1 429 Too Many Requests
Content-Type: application/json
Retry-After: 3600
{
"error": "Too Many Requests",
"message": "Realizaste demasiadas solicitudes en poco tiempo. Esperá una hora antes de intentarlo nuevamente."
}Protege los recursos del servidor y garantiza disponibilidad para todos los usuarios; Retry-After indica cuánto esperar.
Enlace directo a este código
431
Request Header Fields Too Large
El servidor se niega a procesar la solicitud porque uno o más campos de encabezado son demasiado grandes, ya sea el tamaño total o un único encabezado excesivo.
El servidor se niega a procesar la solicitud porque uno o más campos de encabezado son demasiado grandes, ya sea el tamaño total o un único encabezado excesivo.
Explicación
- Propósito
- Protección del servidor: Evitar sobrecarga por encabezados demasiado grandes.
- Control de tamaño: Garantizar encabezados manejables, protegiendo contra ataques o errores de configuración.
- Uso común
- Encabezados excesivos: Clientes que envían demasiados datos en los encabezados, intencionalmente o por error.
- Límite del servidor: Tamaño máximo configurado para los encabezados.
- Contenido de la respuesta
- Mensaje de error: Explica que uno o más encabezados son demasiado grandes.
- Opciones de corrección: Sugerencias para reducir el tamaño.
Ejemplo de uso
GET /recurso HTTP/1.1
Host: www.ejemplo.com
X-Custom-Header: [un encabezado muy largo…]
…HTTP/1.1 431 Request Header Fields Too Large
Content-Type: text/html
<html><body>
<h1>Campos de encabezado demasiado grandes</h1>
<p>Uno o más campos de encabezado en la solicitud son demasiado grandes.</p>
</body></html>Protege al servidor de encabezados excesivos y mantiene su capacidad de atender otras solicitudes.
Enlace directo a este código
444
No Responseno estándar
Código no estándar específico de Nginx. Indica que el servidor cerró la conexión sin enviar respuesta. No está definido en los estándares HTTP ni se usa fuera de Nginx.
Código no estándar específico de Nginx. Indica que el servidor cerró la conexión sin enviar respuesta. No está definido en los estándares HTTP ni se usa fuera de Nginx.
Explicación
- Propósito
- Cerrar la conexión: Sin enviar encabezados ni cuerpo; útil para bloquear solicitudes maliciosas o innecesarias.
- Mitigar ataques: Por ejemplo DoS, donde conviene cerrar la conexión sin responder.
- Uso común
- Configuración de Nginx: Bloquear IPs, solicitudes específicas o comportamientos sospechosos.
- Eficiencia: Al no responder, el servidor ahorra recursos.
- Contenido de la respuesta: No se envía nada al cliente; el servidor simplemente cierra la conexión.
Ejemplo de uso
server {
listen 80;
server_name www.ejemplo.com;
location / {
if ($http_user_agent ~* "malicious_bot") {
return 444;
}
proxy_pass http://backend_server;
}
}Si el agente de usuario coincide con "malicious_bot", Nginx cierra la conexión sin enviar respuesta.
Enlace directo a este código
450
Blocked by Windows Parental Controlsno estándar
Código no estándar definido por Microsoft: el acceso al recurso fue bloqueado por los controles parentales de Windows. Es específico de ciertos entornos de Windows.
Código no estándar definido por Microsoft: el acceso al recurso fue bloqueado por los controles parentales de Windows. Es específico de ciertos entornos de Windows.
Explicación
- Propósito
- Bloqueo de contenido: Indicar que el acceso fue bloqueado por las restricciones de los controles parentales.
- Control parental: Ayudar a administradores y padres a restringir contenido inapropiado.
- Uso común
- Windows Parental Controls: Sistemas con controles parentales habilitados que bloquean ciertos sitios o contenidos.
- Administración de red: Entornos familiares o educativos.
- Contenido de la respuesta: Puede incluir un mensaje explicando el bloqueo, según la implementación.
Ejemplo de uso
GET /sitio-bloqueado HTTP/1.1
Host: www.ejemplo.comHTTP/1.1 450 Blocked by Windows Parental Controls
Content-Type: text/html
<html><body>
<h1>Acceso bloqueado</h1>
<p>El acceso a este recurso fue bloqueado por los controles parentales de Windows.</p>
</body></html>Restringe el acceso a contenido no deseado en dispositivos gestionados por Windows; no forma parte de la especificación HTTP.
Enlace directo a este código
451
Unavailable For Legal Reasons
El recurso no está disponible debido a restricciones legales: el servidor recibió una orden legal que le prohíbe proporcionar acceso al recurso.
El recurso no está disponible debido a restricciones legales: el servidor recibió una orden legal que le prohíbe proporcionar acceso al recurso.
Explicación
- Propósito
- Cumplimiento legal: Informar que el recurso no puede proporcionarse por una orden judicial o una solicitud gubernamental.
- Transparencia: Dar una razón clara y específica en lugar de un genérico 403 Forbidden.
- Uso común
- Censura: Un gobierno u otra entidad legal ordenó bloquear un sitio o recurso.
- Derechos de autor: Contenido retirado por violaciones de propiedad intelectual.
- Contenido de la respuesta
- Mensaje de error: Explica la razón legal de la indisponibilidad.
- Encabezado Link: Puede apuntar, con rel="blocked-by", a la entidad que impuso la restricción.
Ejemplo de uso
GET /articulo-censurado HTTP/1.1
Host: www.ejemplo.comHTTP/1.1 451 Unavailable For Legal Reasons
Link: <https://www.ejemplo.com/orden-legal>; rel="blocked-by"
Content-Type: text/html
<html><body>
<h1>No disponible por motivos legales</h1>
<p>Este contenido no está disponible en su región por una orden legal.</p>
</body></html>El número 451 homenajea a la novela Fahrenheit 451 de Ray Bradbury. Permite distinguir una restricción legal de un simple problema de permisos.
Enlace directo a este código
499
Client Closed Requestno estándar
Código no estándar de Nginx. El cliente cerró la conexión antes de que el servidor pudiera enviar una respuesta.
Código no estándar de Nginx. El cliente cerró la conexión antes de que el servidor pudiera enviar una respuesta.
Explicación
- Propósito: Registrar en los logs del servidor que la solicitud se interrumpió del lado del cliente, no por un fallo del servidor.
- Uso común
- Timeouts del cliente: El cliente tenía un timeout más corto que el tiempo de procesamiento del backend.
- Navegación interrumpida: El usuario cerró la pestaña o canceló la carga antes de recibir la respuesta.
- Contenido de la respuesta: No se envía respuesta: la conexión ya no existe. Solo aparece en los logs de acceso.
Ejemplo de uso
192.0.2.10 - - [01/Oct/2026:10:15:32 -0300] "POST /api/reporte HTTP/1.1" 499 0 "-" "Mozilla/5.0"Si ves muchos 499 en los logs, suele indicar que el backend tarda más de lo que el cliente está dispuesto a esperar.
Enlace directo a este códigoFamilia 5xx Errores del servidor
El servidor falló al procesar una solicitud aparentemente válida.
500
Internal Server Error
El servidor encontró una condición inesperada que le impidió completar la solicitud. Es el error genérico del servidor: se usa cuando no hay un código 5xx más específico.
El servidor encontró una condición inesperada que le impidió completar la solicitud. Es el error genérico del servidor: se usa cuando no hay un código 5xx más específico.
Explicación
- Propósito: Informar que el problema está del lado del servidor, no de la solicitud del cliente.
- Uso común
- Excepciones no controladas: Un error en el código de la aplicación que no fue capturado.
- Fallas de dependencias: La base de datos o un servicio interno no respondió como se esperaba.
- Configuración incorrecta: Permisos de archivos, variables de entorno o módulos mal configurados.
- Contenido de la respuesta
- Mensaje genérico: En producción no debe exponer detalles internos (stack traces, rutas, consultas).
- Identificador de error: Buena práctica: incluir un ID para rastrear el problema en los logs.
Ejemplo de uso
GET /api/pedidos/42 HTTP/1.1
Host: www.ejemplo.comHTTP/1.1 500 Internal Server Error
Content-Type: application/json
{
"error": "Internal Server Error",
"mensaje": "Ocurrió un error inesperado. Intente nuevamente más tarde.",
"id_error": "a1b2c3d4"
}Para QA, un 500 casi siempre es un bug reproducible del backend: hay que reportarlo con el request exacto y el ID de error si existe.
Enlace directo a este código
501
Not Implemented
El servidor no soporta la funcionalidad necesaria para cumplir la solicitud. Generalmente significa que no reconoce el método HTTP o que la funcionalidad aún no fue implementada.
El servidor no soporta la funcionalidad necesaria para cumplir la solicitud. Generalmente significa que no reconoce el método HTTP o que la funcionalidad aún no fue implementada.
Explicación
- Propósito: Informar que el servidor no puede procesar ese tipo de solicitud, ahora ni para ningún recurso (a diferencia de 405, que es por recurso).
- Uso común
- Métodos desconocidos: Un método que el servidor no reconoce en absoluto.
- Funcionalidad en desarrollo: Un endpoint planificado pero todavía no implementado.
- Contenido de la respuesta: Puede incluir un mensaje indicando qué no está implementado.
Ejemplo de uso
PROPFIND /documentos/ HTTP/1.1
Host: www.ejemplo.comHTTP/1.1 501 Not Implemented
Content-Type: text/html
<html><body>
<h1>No implementado</h1>
<p>El servidor no soporta el método PROPFIND.</p>
</body></html>Diferencia clave con 405: en 501 el servidor no soporta el método para ningún recurso; en 405 lo conoce pero no lo permite para ese recurso.
Enlace directo a este código
502
Bad Gateway
El servidor, actuando como gateway o proxy, recibió una respuesta inválida del servidor de origen al que reenvió la solicitud.
El servidor, actuando como gateway o proxy, recibió una respuesta inválida del servidor de origen al que reenvió la solicitud.
Explicación
- Propósito: Informar que el intermediario (proxy inverso, balanceador, CDN) no pudo obtener una respuesta válida del backend.
- Uso común
- Backend caído: El servidor de aplicación no está corriendo o rechaza conexiones.
- Respuesta malformada: El backend respondió algo que el proxy no puede interpretar.
- Despliegues: Durante un deploy, el proxy intenta hablar con una instancia que todavía no arrancó.
- Contenido de la respuesta: Suele ser una página genérica del proxy (Nginx, Apache, Cloudflare) con el mensaje Bad Gateway.
Ejemplo de uso
GET /api/productos HTTP/1.1
Host: www.ejemplo.comHTTP/1.1 502 Bad Gateway
Server: nginx
Content-Type: text/html
<html><body>
<h1>502 Bad Gateway</h1>
<p>El servidor de origen devolvió una respuesta inválida.</p>
</body></html>El problema está entre el proxy y el backend, no en la solicitud del cliente. Revisar si el servicio de aplicación está arriba.
Enlace directo a este código
503
Service Unavailable
El servidor no está disponible temporalmente, generalmente por mantenimiento o sobrecarga. La condición es transitoria y se espera que se resuelva.
El servidor no está disponible temporalmente, generalmente por mantenimiento o sobrecarga. La condición es transitoria y se espera que se resuelva.
Explicación
- Propósito: Informar que el servicio existe pero no puede atender la solicitud en este momento.
- Uso común
- Mantenimiento programado: El sitio está deliberadamente fuera de servicio.
- Sobrecarga: El servidor no tiene capacidad para atender más solicitudes.
- Dependencias caídas: Un servicio crítico (base de datos, caché) no responde.
- Contenido de la respuesta
- Retry-After: Indica en segundos o con una fecha cuándo volver a intentar.
- Mensaje: Una página de mantenimiento o un JSON con el estado del servicio.
Ejemplo de uso
GET / HTTP/1.1
Host: www.ejemplo.comHTTP/1.1 503 Service Unavailable
Retry-After: 1800
Content-Type: text/html
<html><body>
<h1>Servicio no disponible</h1>
<p>Estamos realizando tareas de mantenimiento. Volvé a intentar en 30 minutos.</p>
</body></html>Para SEO conviene usar 503 con Retry-After durante el mantenimiento: los buscadores entienden que es temporal y no desindexan la página.
Enlace directo a este código
504
Gateway Timeout
El servidor, actuando como gateway o proxy, no recibió a tiempo una respuesta del servidor de origen.
El servidor, actuando como gateway o proxy, no recibió a tiempo una respuesta del servidor de origen.
Explicación
- Propósito: Informar que el intermediario esperó una respuesta del backend y el tiempo límite se agotó.
- Uso común
- Consultas lentas: Un endpoint que tarda más que el timeout configurado en el proxy.
- Backend saturado: El servidor de aplicación está vivo pero no da abasto.
- Problemas de red: Latencia o pérdida de paquetes entre el proxy y el origen.
- Contenido de la respuesta: Página genérica del proxy indicando Gateway Timeout.
Ejemplo de uso
GET /api/reporte-anual HTTP/1.1
Host: www.ejemplo.comHTTP/1.1 504 Gateway Timeout
Server: nginx
Content-Type: text/html
<html><body>
<h1>504 Gateway Timeout</h1>
<p>El servidor de origen no respondió a tiempo.</p>
</body></html>Diferencia con 502: en 502 el backend respondió algo inválido; en 504 directamente no respondió a tiempo. Suele indicar un problema de performance.
Enlace directo a este código
505
HTTP Version Not Supported
El servidor no soporta, o se niega a soportar, la versión de HTTP usada en la solicitud.
El servidor no soporta, o se niega a soportar, la versión de HTTP usada en la solicitud.
Explicación
- Propósito: Informar que la versión del protocolo indicada en la línea de solicitud no es compatible con el servidor.
- Uso común
- Clientes antiguos: Herramientas que usan HTTP/1.0 contra servidores que exigen HTTP/1.1 o superior.
- Versiones inválidas: Una versión mal formada o inexistente en la solicitud.
- Contenido de la respuesta: Puede indicar qué versiones sí son soportadas.
Ejemplo de uso
GET /recurso HTTP/3.5
Host: www.ejemplo.comHTTP/1.1 505 HTTP Version Not Supported
Content-Type: text/html
<html><body>
<h1>Versión HTTP no soportada</h1>
<p>Este servidor soporta HTTP/1.1 y HTTP/2.</p>
</body></html>Poco frecuente en la práctica; aparece sobre todo con clientes o scripts mal configurados.
Enlace directo a este código
506
Variant Also Negotiates
Error de configuración del servidor: la negociación transparente de contenido (RFC 2295) eligió una variante que, a su vez, también negocia, lo que genera una referencia circular.
Error de configuración del servidor: la negociación transparente de contenido (RFC 2295) eligió una variante que, a su vez, también negocia, lo que genera una referencia circular.
Explicación
- Propósito: Señalar un error interno en la configuración de la negociación de contenido.
- Uso común: Prácticamente inexistente fuera de servidores que implementan negociación transparente; indica un bucle en la configuración de variantes.
- Contenido de la respuesta: Un mensaje de error indicando el problema de configuración.
Ejemplo de uso
GET /documento HTTP/1.1
Host: www.ejemplo.com
Accept: text/html, application/pdfHTTP/1.1 506 Variant Also Negotiates
Content-Type: text/plain
Error de configuración: la variante seleccionada también negocia contenido.Es un error del lado del servidor que debe corregirse en la configuración de la negociación de contenido.
Enlace directo a este código
507
Insufficient Storage
Propio de WebDAV. El servidor no puede almacenar la representación necesaria para completar la solicitud porque no tiene espacio suficiente.
Propio de WebDAV. El servidor no puede almacenar la representación necesaria para completar la solicitud porque no tiene espacio suficiente.
Explicación
- Propósito: Informar que la operación requiere más almacenamiento del que el servidor tiene disponible.
- Uso común
- Subida de archivos: Un PUT o COPY en un servidor WebDAV con el disco lleno.
- Cuotas de usuario: El usuario superó la cuota de almacenamiento asignada.
- Contenido de la respuesta: Puede detallar el espacio disponible o la cuota excedida.
Ejemplo de uso
PUT /archivos/video.mp4 HTTP/1.1
Host: www.ejemplo.com
Content-Length: 4294967296HTTP/1.1 507 Insufficient Storage
Content-Type: text/html
<html><body>
<h1>Almacenamiento insuficiente</h1>
<p>No hay espacio suficiente para guardar el archivo.</p>
</body></html>La condición es temporal si se libera espacio; el cliente puede reintentar más tarde.
Enlace directo a este código
508
Loop Detected
Propio de WebDAV. El servidor detectó un bucle infinito mientras procesaba una solicitud con Depth: infinity, típicamente por enlaces o bindings circulares.
Propio de WebDAV. El servidor detectó un bucle infinito mientras procesaba una solicitud con Depth: infinity, típicamente por enlaces o bindings circulares.
Explicación
- Propósito: Informar que la operación completa falló porque el recorrido de recursos entraría en un ciclo sin fin.
- Uso común
- Colecciones con referencias circulares: Una carpeta que contiene un enlace a sí misma o a un ancestro.
- Operaciones recursivas: PROPFIND, COPY o MOVE con profundidad infinita.
- Contenido de la respuesta: Mensaje indicando que se detectó un bucle.
Ejemplo de uso
PROPFIND /carpeta/ HTTP/1.1
Host: www.ejemplo.com
Depth: infinityHTTP/1.1 508 Loop Detected
Content-Type: text/plain
Se detectó un bucle al recorrer /carpeta/enlace-a-carpeta/Relacionado con 208 Already Reported, que es la forma de evitar este problema dentro de una respuesta 207.
Enlace directo a este código
510
Not Extended
La solicitud necesita extensiones adicionales del protocolo que el servidor no soporta o que no fueron declaradas (RFC 2774, HTTP Extension Framework).
La solicitud necesita extensiones adicionales del protocolo que el servidor no soporta o que no fueron declaradas (RFC 2774, HTTP Extension Framework).
Explicación
- Propósito: Informar que la política del servidor requiere declarar extensiones adicionales para atender la solicitud.
- Uso común: Muy raro en la práctica; el marco de extensiones del RFC 2774 casi no se implementa.
- Contenido de la respuesta: Debería describir qué extensiones son necesarias.
Ejemplo de uso
GET /recurso HTTP/1.1
Host: www.ejemplo.comHTTP/1.1 510 Not Extended
Content-Type: text/plain
Esta solicitud requiere la extensión X para ser procesada.Código histórico; si lo encontrás en producción, revisá la documentación específica del servidor.
Enlace directo a este código
511
Network Authentication Required
El cliente necesita autenticarse para obtener acceso a la red. Lo generan los intermediarios de red (por ejemplo, portales cautivos de Wi-Fi), no el servidor de origen.
El cliente necesita autenticarse para obtener acceso a la red. Lo generan los intermediarios de red (por ejemplo, portales cautivos de Wi-Fi), no el servidor de origen.
Explicación
- Propósito: Indicar que la red requiere autenticación antes de permitir el tráfico, en lugar de redirigir silenciosamente a una página de login.
- Uso común
- Portales cautivos: Wi-Fi de hoteles, aeropuertos o cafeterías que exigen aceptar términos o iniciar sesión.
- Redes corporativas: Acceso a Internet condicionado a autenticación.
- Contenido de la respuesta: Una página con el formulario de autenticación o un enlace al portal.
Ejemplo de uso
GET https://www.ejemplo.com/ HTTP/1.1
Host: www.ejemplo.comHTTP/1.1 511 Network Authentication Required
Content-Type: text/html
<html><body>
<h1>Autenticación de red requerida</h1>
<p>Iniciá sesión en el <a href="https://portal.wifi-ejemplo.com/login">portal de acceso</a> para navegar.</p>
</body></html>Permite que las aplicaciones detecten un portal cautivo en lugar de interpretar la página de login como la respuesta real del sitio.
Enlace directo a este código
520
Web Server Returned an Unknown Errorno estándar
Código no estándar de Cloudflare. El servidor de origen devolvió una respuesta vacía, desconocida o inesperada que Cloudflare no pudo interpretar.
Código no estándar de Cloudflare. El servidor de origen devolvió una respuesta vacía, desconocida o inesperada que Cloudflare no pudo interpretar.
Explicación
- Propósito: Agrupar fallas del origen que no encajan en ningún otro código: conexión reseteada, encabezados inválidos, respuesta vacía.
- Uso común
- Encabezados demasiado grandes: El origen envía encabezados que superan los límites de Cloudflare.
- Conexión reseteada: El origen corta la conexión después de recibir la solicitud.
- Respuesta vacía: El origen no devuelve ningún encabezado HTTP.
Ejemplo de uso
HTTP/1.1 520
Server: cloudflare
Content-Type: text/html
<html><body>
<h1>Error 520</h1>
<p>Web server is returning an unknown error.</p>
</body></html>Para diagnosticar hay que revisar los logs del servidor de origen; el problema no está en Cloudflare ni en el cliente.
Enlace directo a este código
521
Web Server Is Downno estándar
Código no estándar de Cloudflare. El servidor de origen rechazó la conexión de Cloudflare.
Código no estándar de Cloudflare. El servidor de origen rechazó la conexión de Cloudflare.
Explicación
- Propósito: Indicar que Cloudflare pudo resolver el origen pero este no acepta conexiones.
- Uso común
- Servidor apagado: El servicio web del origen no está corriendo.
- Firewall: El origen bloquea las IPs de Cloudflare.
Ejemplo de uso
HTTP/1.1 521
Server: cloudflare
Web server is downVerificá que el servidor web del origen esté levantado y que acepte conexiones desde los rangos de IP de Cloudflare.
Enlace directo a este código
522
Connection Timed Outno estándar
Código no estándar de Cloudflare. No se pudo establecer la conexión TCP con el servidor de origen dentro del tiempo límite.
Código no estándar de Cloudflare. No se pudo establecer la conexión TCP con el servidor de origen dentro del tiempo límite.
Explicación
- Propósito: Indicar que el handshake TCP con el origen no se completó a tiempo.
- Uso común
- Origen sobrecargado: No puede aceptar nuevas conexiones.
- Firewall o rate limiting: Descarta los paquetes de Cloudflare.
- IP incorrecta: El registro DNS apunta a una IP equivocada.
Ejemplo de uso
HTTP/1.1 522
Server: cloudflare
Connection timed outDiferencia con 524: en 522 la conexión nunca se estableció; en 524 se estableció pero el origen no respondió.
Enlace directo a este código
523
Origin Is Unreachableno estándar
Código no estándar de Cloudflare. Cloudflare no puede alcanzar el servidor de origen, generalmente por DNS o rutas de red incorrectas.
Código no estándar de Cloudflare. Cloudflare no puede alcanzar el servidor de origen, generalmente por DNS o rutas de red incorrectas.
Explicación
- Propósito: Indicar que la IP del origen no es alcanzable desde la red de Cloudflare.
- Uso común
- DNS mal configurado: El registro apunta a una IP inexistente o interna.
- Problemas de ruteo: El proveedor del origen tiene problemas de red.
Ejemplo de uso
HTTP/1.1 523
Server: cloudflare
Origin is unreachableRevisá los registros DNS del dominio en Cloudflare y la conectividad del servidor de origen.
Enlace directo a este código
524
A Timeout Occurredno estándar
Código no estándar de Cloudflare. La conexión TCP con el origen se estableció correctamente, pero el origen no devolvió una respuesta HTTP dentro del tiempo límite (100 segundos por defecto).
Código no estándar de Cloudflare. La conexión TCP con el origen se estableció correctamente, pero el origen no devolvió una respuesta HTTP dentro del tiempo límite (100 segundos por defecto).
Explicación
- Propósito: Indicar que el origen aceptó la conexión pero tardó demasiado en responder.
- Uso común
- Procesos largos: Reportes, exportaciones o consultas pesadas que superan los 100 segundos.
- Backend lento: Problemas de performance en la aplicación o la base de datos.
Ejemplo de uso
HTTP/1.1 524
Server: cloudflare
A timeout occurredEquivale conceptualmente a un 504. La solución suele ser optimizar el endpoint o moverlo a un procesamiento asíncrono (202 Accepted).
Enlace directo a este código
525
SSL Handshake Failedno estándar
Código no estándar de Cloudflare. Falló el handshake SSL/TLS entre Cloudflare y el servidor de origen.
Código no estándar de Cloudflare. Falló el handshake SSL/TLS entre Cloudflare y el servidor de origen.
Explicación
- Propósito: Indicar que no se pudo negociar una conexión cifrada con el origen.
- Uso común
- Modo SSL Full sin certificado: Cloudflare espera HTTPS en el origen pero el origen no lo soporta en el puerto 443.
- Cifrados incompatibles: El origen no soporta los cipher suites que Cloudflare ofrece.
Ejemplo de uso
HTTP/1.1 525
Server: cloudflare
SSL handshake failedVerificá que el origen tenga un certificado válido instalado y que el modo SSL de Cloudflare coincida con la configuración del servidor.
Enlace directo a este código
526
Invalid SSL Certificateno estándar
Código no estándar de Cloudflare. Cloudflare no pudo validar el certificado SSL del servidor de origen (modo Full Strict).
Código no estándar de Cloudflare. Cloudflare no pudo validar el certificado SSL del servidor de origen (modo Full Strict).
Explicación
- Propósito: Indicar que el certificado del origen está vencido, es autofirmado o no coincide con el dominio.
- Uso común
- Certificado vencido: Hay que renovarlo.
- Certificado autofirmado: Con Full Strict se requiere uno emitido por una CA de confianza o un Origin Certificate de Cloudflare.
Ejemplo de uso
HTTP/1.1 526
Server: cloudflare
Invalid SSL certificateInstalá un certificado válido en el origen o usá un Cloudflare Origin Certificate.
Enlace directo a este códigoLos que más confunden
Diferencias que todo tester debería conocer
Unauthorized vs Forbidden
401: faltan credenciales o son inválidas; autenticarse puede resolverlo. 403: el servidor sabe quién sos y aun así no te deja pasar; autenticarse no cambia nada.
Redirección permanente
Las dos son permanentes, pero 308 garantiza que el método y el cuerpo se conservan. Con 301, un POST puede terminar como GET.
Redirección temporal
Misma lógica: 307 conserva el método original; 302 permite que el cliente lo cambie a GET.
No encontrado vs eliminado
404 no promete nada sobre el futuro del recurso. 410 afirma que se fue para siempre y que los buscadores deberían dejar de pedirlo.
Sintaxis vs semántica
400: la solicitud está mal formada. 422: la sintaxis es correcta pero los datos no pasan las validaciones de negocio.
Gateway
502: el servidor de origen respondió algo inválido. 504: directamente no respondió a tiempo.