Qué son los códigos de estado HTTP
Los códigos de estado HTTP son números que el servidor envía al cliente (generalmente un navegador web) para indicar el resultado de una solicitud HTTP. Estos códigos son parte de la respuesta del servidor y ayudan a los desarrolladores a diagnosticar problemas y a entender cómo interactúan los diferentes componentes de la web.
Estructura de los códigos de estado HTTP
Los códigos de estado HTTP se dividen en cinco categorías, cada una representada por el primer dígito del código:
- 1xx – Información: Indican que la solicitud fue recibida y que el proceso continúa.
- 2xx – Éxito: Indican que la solicitud fue recibida, entendida y procesada correctamente.
- 3xx – Redirecciones: Indican que se requiere una acción adicional para completar la solicitud.
- 4xx – Errores del cliente: Indican que hubo un problema con la solicitud del cliente.
- 5xx – Errores del servidor: Indican que el servidor falló al completar una solicitud válida.
Códigos de estado más comunes
Códigos de éxito (2xx)
- 200 OK: La solicitud fue exitosa.
- 201 Created: La solicitud fue exitosa y se creó un nuevo recurso.
- 204 No Content: La solicitud fue exitosa, pero no devuelve contenido.
Códigos de redirección (3xx)
- 301 Moved Permanently: El recurso solicitado se ha movido permanentemente a otra URL.
- 302 Found: El recurso se encuentra temporalmente en otra URL.
- 304 Not Modified: Indica que el contenido no ha cambiado desde la última solicitud.
Códigos de error del cliente (4xx)
- 400 Bad Request: La solicitud no se pudo procesar debido a un error del cliente.
- 401 Unauthorized: Se requiere autenticación para acceder al recurso.
- 404 Not Found: El recurso solicitado no se encuentra.
- 403 Forbidden: El servidor entendió la solicitud, pero se niega a autorizarla.
Códigos de error del servidor (5xx)
- 500 Internal Server Error: Se ha producido un error inesperado en el servidor.
- 502 Bad Gateway: El servidor actuó como puerta de enlace o proxy y recibió una respuesta inválida del servidor de origen.
- 503 Service Unavailable: El servidor no está disponible temporalmente.
Ejemplos prácticos de manejo de errores HTTP
En el desarrollo de aplicaciones web, es esencial manejar correctamente los diferentes códigos de estado HTTP. A continuación, se presentan ejemplos de cómo gestionar errores en una API REST utilizando Python y Flask:
Configuración de una API básica con Flask
from flask import Flask, jsonify, request
app = Flask(__name__)
@app.route('/api/resource', methods=['GET'])
def get_resource():
resource_id = request.args.get('id')
if resource_id is None:
return jsonify({'error': 'Resource ID is required'}), 400 # 400 Bad Request
# Lógica para obtener el recurso
return jsonify({'id': resource_id, 'name': 'Example Resource'}), 200 # 200 OK
@app.errorhandler(404)
def not_found(error):
return jsonify({'error': 'Resource not found'}), 404 # 404 Not Found
if __name__ == '__main__':
app.run(debug=True)
En este ejemplo, se crea una API simple que devuelve un recurso según su ID. Si el ID no se proporciona, el servidor devuelve un 400 Bad Request. Además, si se solicita un recurso inexistente, se retorna un 404 Not Found.
Tabla completa de los códigos de error
1×× Informativos
| Código | Significado | SEO / Uso recomendado |
| 100 Continue | Solicitud recibida, el cliente puede continuar. | Se usa muy poco en SEO. |
| 101 Switching Protocols | El servidor cambia de protocolo según lo solicitado. | Sin impacto en SEO. |
| 102 Processing | El servidor recibió la solicitud y sigue procesando; sin respuesta final aún. | Usado en operaciones largas (WebDAV); sin impacto SEO. |
2×× Éxito
| Código | Significado | SEO / Uso recomendado |
| 200 OK | La solicitud se completó correctamente. | Respuesta estándar necesaria para el rastreo. |
| 201 Created | Recurso creado (normalmente en POST). | Común en APIs; no afecta al rastreo. |
| 202 Accepted | Solicitud recibida pero procesamiento pendiente. | Operaciones asíncronas; sin efecto SEO. |
| 203 Non-Authoritative Information | Respuesta generada por un proxy transformador. | Poco común; sin valor SEO. |
| 204 No Content | Éxito sin cuerpo de respuesta. | Útil para APIs. |
| 205 Reset Content | El cliente debe reiniciar el formulario. | No relevante para SEO. |
| 206 Partial Content | El servidor entregó solo una parte del recurso. | Útil en descargas/streaming; sin uso SEO. |
| 207 Multi-Status | Múltiples códigos para WebDAV. | No relevante para SEO. |
| 208 Already Reported | Evita repeticiones en WebDAV. | No relevante para SEO. |
| 226 IM Used | El servidor aplicó codificación delta. | Muy raro; sin impacto SEO. |
3×× Redirección
| Código | Significado | SEO / Uso recomendado |
| 300 Multiple Choices | Varias opciones para el recurso. | Puede confundir a los robots; evitar. |
| 301 Moved Permanently | Recurso movido permanentemente. | Redirección óptima para SEO. |
| 302 Found | Redirección temporal. | Evitar en SEO a largo plazo; mejor usar 301. |
| 303 See Other | Redirige a otra URI con método GET. | Usado en envíos de formularios. |
| 304 Not Modified | El cliente puede usar su versión en caché. | Reduce carga de rastreo. |
| 305 Use Proxy | Debe accederse mediante proxy. | Obsoleto; ignorar. |
| 307 Temporary Redirect | Similar a 302, pero conserva el método. | Para movimientos temporales; no usar a largo plazo. |
| 308 Permanent Redirect | Similar a 301 pero conserva el método. | Buena alternativa SEO a 301. |
4×× Error del cliente
| Código | Significado | SEO / Uso recomendado |
| 400 Bad Request | Sintaxis inválida en la solicitud. | Revisar logs; corregir URLs mal formadas. |
| 401 Unauthorized | Autenticación requerida. | Puede bloquear a los rastreadores. |
| 402 Payment Required | Reservado para uso futuro. | No relevante. |
| 403 Forbidden | Acceso denegado. | Evitar bloquear páginas importantes. |
| 404 Not Found | Página no encontrada. | Aplicar redirección o personalizar la página. |
| 405 Method Not Allowed | Método no permitido. | Revisar endpoints de API. |
| 406 Not Acceptable | El recurso no puede devolver el formato solicitado. | Poco común; sin relevancia SEO. |
| 407 Proxy Authentication Required | El cliente debe autenticarse en el proxy. | No relevante. |
| 408 Request Timeout | El servidor agotó el tiempo de espera. | Puede afectar rastreo. |
| 409 Conflict | Conflicto de solicitud. | Problemas de aplicaciones; no SEO. |
| 410 Gone | Recurso eliminado intencionalmente. | Indica a buscadores que la página ya no existe. |
| 411 Length Required | Falta el encabezado Content-Length. | No relevante. |
| 412 Precondition Failed | No se cumplen las condiciones. | APIs/WebDAV. |
| 413 Payload Too Large | La petición es demasiado grande. | No relevante. |
| 414 URI Too Long | La URL supera la longitud máxima. | Evitar URLs excesivamente largas. |
| 415 Unsupported Media Type | Tipo de archivo no soportado. | Sin impacto SEO. |
| 416 Range Not Satisfiable | Rango inválido. | No impacta SEO. |
| 417 Expectation Failed | El servidor no puede cumplir el encabezado Expect. | Raro. |
| 418 I’m a Teapot | Código de broma (RFC 2324). | Sin uso. |
| 421 Misdirected Request | Solicitud al servidor incorrecto. | Problemas con CDN. |
| 422 Unprocessable Entity | Errores semánticos. | WebDAV. |
| 423 Locked | Recurso bloqueado. | WebDAV. |
| 424 Failed Dependency | Fallo por dependencia. | WebDAV. |
| 426 Upgrade Required | El cliente debe cambiar de protocolo. | No relevante. |
| 428 Precondition Required | El servidor exige precondiciones. | Raro. |
| 429 Too Many Requests | Límite de peticiones excedido. | Puede bloquear bots. |
| 431 Request Header Fields Too Large | Cabeceras demasiado grandes. | Puede bloquear rastreadores. |
| 444 Connection Closed Without Response | El servidor cierra la conexión sin responder (nginx). | Auditar reglas WAF/CDN para evitar falsos positivos. |
| 451 Unavailable for Legal Reasons | Acceso denegado por motivos legales. | El contenido puede desaparecer del buscador. |
| 499 Client Closed Request | El cliente cierra la conexión antes de recibir respuesta (nginx). | Revisar TTFB y estabilidad del servidor. |
5×× Error del servidor
| Código | Significado | SEO / Uso recomendado |
| 500 Internal Server Error | Error genérico del servidor. | Corregir de inmediato; perjudica al SEO. |
| 501 Not Implemented | Funcionalidad no implementada. | Raro. |
| 502 Bad Gateway | Respuesta inválida del servidor intermedio. | Revisar hosting/CDN. |
| 503 Service Unavailable | Servidor caído o sobrecargado. | Útil para mantenimientos planificados. |
| 504 Gateway Timeout | El servidor intermedio no respondió a tiempo. | Problemas de hosting/CDN. |
| 505 HTTP Version Not Supported | Versión HTTP no soportada. | Raro. |
| 506 Variant Also Negotiates | Error de configuración en la negociación de contenido. | Muy raro. |
Importancia de personalizar los mensajes de error
Personalizar los mensajes de error es vital para mejorar la experiencia del usuario. Proveer información clara sobre el motivo del error o los pasos a seguir puede reducir la frustración del usuario y aumentar la tasa de retención. Por ejemplo, en lugar de un simple “Error 404”, un mensaje como “La página que buscas no está disponible. Verifica la URL o vuelve a la página principal” es mucho más útil.
Conclusión
Entender y manejar los códigos de estado HTTP es una habilidad esencial para cualquier desarrollador web. Conocer la diferencia entre los códigos de éxito, redirección y error no solo permite diseñar aplicaciones más robustas, sino que también ofrece una mejor experiencia al usuario en general. Mantener una buena comunicación entre el cliente y el servidor es clave en el desarrollo moderno.

Deja una respuesta