AdSense Placeholder
Slot: header_reference_page
Toda respuesta HTTP empieza con un código de estado de tres dígitos. El primer dígito es la clase; los otros dos la precisan. Esta página reúne los códigos que más verá. Para todos ellos, con búsqueda, use el Búsqueda de Códigos de Estado HTTP.
| Código |
Nombre |
Significado |
100 |
Continue |
El cliente puede seguir enviando el cuerpo de la petición |
101 |
Switching Protocols |
Cambio a otro protocolo, como WebSocket |
2xx Éxito
| Código |
Nombre |
Significado |
200 |
OK |
La petición funcionó y la respuesta lleva el resultado |
201 |
Created |
Se creó algo nuevo (típico de POST) |
202 |
Accepted |
Aceptada para procesar, aún sin terminar |
204 |
No Content |
Éxito sin cuerpo que devolver (típico de DELETE) |
206 |
Partial Content |
Solo el rango de bytes pedido (descargas reanudables, vídeo) |
3xx Redirección
| Código |
Nombre |
Significado |
301 |
Moved Permanently |
Movido de forma permanente: actualice enlaces y marcadores |
302 |
Found |
Temporalmente en otro sitio: siga usando la URL original |
303 |
See Other |
Vaya a hacer GET a otra URL (tras un POST) |
304 |
Not Modified |
No modificado: use su copia en caché |
307 |
Temporary Redirect |
Redirección temporal que conserva método y cuerpo |
308 |
Permanent Redirect |
Redirección permanente que conserva método y cuerpo |
4xx Error del cliente
| Código |
Nombre |
Significado |
400 |
Bad Request |
La petición está mal formada o es inválida |
401 |
Unauthorized |
No autenticado: faltan credenciales o son incorrectas |
403 |
Forbidden |
Autenticado pero sin permiso para hacerlo |
404 |
Not Found |
No existe nada en esta URL |
405 |
Method Not Allowed |
La URL existe pero no para este método |
406 |
Not Acceptable |
No puede producir una respuesta que el cliente acepte |
408 |
Request Timeout |
El servidor se cansó de esperar la petición |
409 |
Conflict |
Entra en conflicto con el estado actual (colisión de edición, duplicado) |
410 |
Gone |
Desaparecido para siempre: más fuerte que 404 |
413 |
Content Too Large |
El cuerpo de la petición es demasiado grande |
414 |
URI Too Long |
La URL es demasiado larga |
415 |
Unsupported Media Type |
El formato del cuerpo (Content-Type) no es compatible |
416 |
Range Not Satisfiable |
No se puede servir el rango de bytes pedido |
418 |
I'm a Teapot |
El servidor es una tetera (una broma del 1 de abril, RFC 2324) |
422 |
Unprocessable Content |
Bien formada pero semánticamente inválida (habitual en APIs) |
429 |
Too Many Requests |
Demasiadas peticiones: límite de tasa, revise Retry-After |
431 |
Request Header Fields Too Large |
Las cabeceras de la petición son demasiado grandes |
451 |
Unavailable For Legal Reasons |
Bloqueado por razones legales |
5xx Error del servidor
| Código |
Nombre |
Significado |
500 |
Internal Server Error |
Un fallo genérico del servidor |
501 |
Not Implemented |
El servidor no admite esta función o método |
502 |
Bad Gateway |
Una pasarela o proxy recibió una respuesta inválida de origen |
503 |
Service Unavailable |
No disponible temporalmente (sobrecarga, mantenimiento) |
504 |
Gateway Timeout |
Una pasarela o proxy agotó el tiempo esperando al origen |
505 |
HTTP Version Not Supported |
La versión de HTTP no es compatible |
Pares fáciles de confundir
- 401 frente a 403.
401 significa «no sé quién es usted» (inicie sesión, o su token es incorrecto o ha caducado). 403 significa «sé quién es usted y la respuesta es no».
- 301, 302, 307 y 308. El par permanente es
301 y 308; el temporal es 302 y 307. Los más nuevos 307 y 308 garantizan que el método y el cuerpo se repiten sin cambios, mientras que clientes antiguos pueden convertir un POST con 301 o 302 en un GET.
- 404 frente a 410. Ambos significan «aquí no está».
410 indica que se eliminó a propósito y no volverá, lo que ayuda a los buscadores a olvidar la URL antes.
- 502, 503 y 504.
502: el servidor de origen respondió mal. 503: el servicio está caído o sobrecargado, a propósito o sin querer. 504: el servidor de origen no respondió a tiempo.
- 400 frente a 422.
400 es para peticiones que el servidor no puede interpretar; 422 para las que interpretó bien pero no puede aceptar, como un JSON válido con un correo inválido.
Elegir un código para una API
- Devuelva
200 con cuerpo en lecturas y actualizaciones, 201 con cabecera Location en creaciones y 204 cuando no hay nada que devolver.
- Use
404 para un recurso inexistente y 409 para un conflicto, no 400 para todo.
- Use
401 solo con un desafío de autenticación y 403 para problemas de permisos.
- Añada
Retry-After a 429 y 503 para que los clientes sepan cuándo reintentar.
- No esconda errores tras un
200: las herramientas de monitorización, las cachés y los clientes dependen del código de estado.
Lectura relacionada: HTTP, Redirección, Limitación de tasa (rate limiting) y Guía rápida de cabeceras HTTP.