Significado de los códigos de estado HTTP
Seguramente te habrá pasado más de una vez que tu navegador te devuelve uno de estos códigos de estado HTTP y no sabes que significa.
La mayor parte de veces no sabemos si es nuestra conexión a internet, si el servidor a caido, si nuestra web tiene un problema, estos códigos de estado http te ayudan a comprender que está sucediendo
En el post de hoy voy a tratar de explicar el significado de cada uno de los códigos de estado http y lo que puedes hacer, a veces no está en tu mano, para resolverlo.
La siguiente lista actualizada a 4 de noviembre de 2015, muestra todos los códigos de estado HTTP oficiales y su explicación, tal y como se recogen en el registro de códigos de estado HTTP de la IANA (Internet Assigned Numbers Authority).
Códigos de estado http 1XX
Informan al navegador de que se está proicesando la solicitud y que el proceso continúa:
- 100 (Continue), el navegador puede continuar realizando su petición (se utiliza para indicar que la primera parte de la petición del navegador se ha recibido correctamente).
- 101 (Switching Protocole), el servidor acepta el cambio de protocolo propuesto por el navegador (puede ser por ejemplo un cambio de
HTTP 1.0
aHTTP 1.1
). - 102 (Processing (WebDAV)), el servidor está procesando la petición del navegador pero todavía no ha terminado (esto evita que el navegador piense que la petición se ha perdido cuando no recibe ninguna respuesta).
- 103 (Checkpoint), se va a reanudar una petición
POST
oPUT
que fue abortada previamente. actualmente ya no se utiliza. - Los códigos de estado http del 104 al 199 no están asignados a ninguna respuesta por ahora.
Códigos de estado http 2XX
Estos códigos de estado http son los más gratificantes, ya que significa que ñas peticiones del navegador devuelven resultados positivos y que todo funciona bien.
Indican que la petición del navegador se ha recibido, procesado y respondido correctamente:
- 200 (Ok), la petición del navegador ha sido completada con éxito, este tipo de códigos de estado http también es de mucha utilidad cuando un cliente te reporta problemas con el correo, ya que si las peticiones en el log están firmadas con status 200 significa que tu servidor a entregado el mail al servidor del receptor, por tanto el error es de recepción.
- 201 (Created), la petición del navegador se ha completado con éxito y como resultado, se ha creado un nuevo recurso (la respuesta incluye la URI de ese recurso).
- 202 (Accepted), la petición del navegador se ha aceptado y se está procesando en estos momentos, por lo que todavía no hay una respuesta (se utiliza por ejemplo cuando un proceso realiza una petición muy compleja a un servidor y no quiere estar horas esperando la respuesta).
- 203 (Non-Authoritative Information), la petición se ha completado con éxito, pero el contenido solicitado no se ha obtenido de la fuente originalmente solicitada sino de otro servidor.
- 204 (No Content), la petición se ha completado con éxito pero su respuesta no tiene ningún contenido (la respuesta sí que puede incluir información en sus cabeceras HTTP).
- 205 (Reset Content), la petición se ha completado con éxito, pero su respuesta no tiene contenidos y además, el navegador tiene que inicializar la página desde la que se realizó la petición (este código es útil por ejemplo para páginas con formularios cuyo contenido debe ser borrado después de la acción de enviar y que no permanezca en cahcé).
- 206 (Partial Content), La respuesta de esta petición sólo tiene parte de los contenidos, tal y como lo solicitó el propio navegador (muy útil para contenidos pesados en el servidor, por ejemplo: descarga un archivo muy grande en varias partes para acelerar la descarga).
- 207 (Multi-Status (WebDAV)), la respuesta consiste en un archivo XML que contiene en su interior varias respuestas diferentes (el número depende de las peticiones realizadas previamente por el navegador).
- 208 (Already Reported (WebDAV)), el listado de elementos DAV ya se notificó previamente, por lo que no se van a volver a listar.
- Los códigos de estado http del 209 al 299 no están asignados por ahora.
Códigos de estado http 3XX
Quizá estos sean los códigos de estado http que más hay que tener en cuenta cuando trabajamos el SEO de una determinada web, ya que hay códigos de estado http vitales para el SEO, vemos cuales son:
Indican que el navegador va a tener que realizar algun tipo de acción adicional para que la petición se complete (como por ejemplo redirigirse a otra página):
- 300 (Multiple Choices), existe más de una variante para el recurso solicitado por el navegador (por ejemplo si la petición se corresponde con más de un archivo).
- 301 (Moved Permanently), el recurso solicitado por el navegador se encuentra en otro lugar y este cambio es permanente. El navegador es redirigido automáticamente a la nueva localización de ese recurso (este tipo de códigos de estado http es muy importante para tareas relacionadas con el SEO de los sitios web).
- 302 (Moved Temporarily), el recurso solicitado por el navegador se encuentra en otro lugar, aunque sólo por tiempo limitado. El navegador es redirigido automáticamente a la nueva localización de ese recurso, este tipo de códigos de estado http resulta muy útil mientras tienes tu web en diseño, ya que te permite verificar las redirecciones, no hay que olvidar devolver a 301 las redirecciones 302 al pasar la web a producción.
- 303 (See Other), el recurso solicitado por el navegador se encuentra en otro lugar. El servidor no redirige automáticamente al navegador, pero le indica la nueva URI en la que se puede obtener el recurso. En este caso te suele mostrar un mensaje tipo: «el navegador le está redirigiendo, si tarda mucho pinche en el siguiente enlace».
- 304 (Not Modified), cuando el navegador pregunta si un recurso ha cambiado desde la última vez que se solicitó, el servidor responde con este código cuando el recurso no ha cambiado.
- 305 (Use Proxy), el recurso solicitado por el navegador debe obtenerse a través del proxy cuya dirección se indica en la cabecera
Location
de esta misma respuesta. - 306 (Switch Proxy), este código se utilizaba en las versiones antiguas de HTTP pero ya no se usa (aunque está reservado para usos futuros).
- 307 (Temporary Redirect), el recurso solicitado por el navegador se puede obtener en otro lugar, pero sólo para esta petición. Las próximas peticiones pueden seguir utilizando la localización original del recurso.
- 308 (Permanent Redirect), el recurso solicitado por el navegador se encuentra en otro lugar y este cambio es permanente. A diferencia del código
301
, no se permite cambiar el método HTTP para la nueva petición (así por ejemplo, si envías un formulario a un recurso que ha cambiado de lugar, todo seguirá funcionando bien). - Los códigos de estado http del 309 al 399 no se utilizan por ahora.
Códigos de estado http 4XX
Vamos a por los errores que mas quebraderos de cabeza nos dan, estos códigos de estado http suelen ser provocados por errores en enlaces o secuencias de código que no resultan comprensibles para el navegador:
- 400 (Bad Request), el servidor no es capaz de entender la petición del navegador porque su sintaxis no es correcta.
- 401 (Unauthorized), el recurso solicitado por el navegador requiere de autenticación. La respuesta incluye una cabecera de tipo
WWW-Authenticate
para que el navegador pueda iniciar el proceso de autenticación, muy habitual en directorios protegidos pos contraseña. - 402 (Payment Required), este código está reservado para usos futuros, en principio es utilizado por algunas pasarelas de pago y se usa como devolución de cabeceras xml a una petición determinada.
- 403 (Forbidden), la petición del navegador es correcta, pero el servidor no puede responder con el recurso solicitado porque se ha denegado el acceso, estos códigos de estado http se pueden mostrar por varios motivos, recursos bloqueados por robots.txt, bloqueos desde .htaccess o simplemente protección de determinados subdirectorios en la raiz
- 404 (Not Found), el servidor no puede encontrar el recurso solicitado por el navegador y no es posible determinar si esta ausencia es temporal o permanente. Este es seguramente uno de los códigos de estado http más incómodo y a la vez el más popular, ya que significa que el recurso que se ha solicitado no existe en esa dirección. No hay que alarmarse en exceso, ya que los motivos pueden ser diversos y me atrevería a calificarlos entre leves, graves y muy graves.
- La primera alerta se produce cuando en Search Console vemos el número de recursos que devuelven un código de estado http 404, el primer sobresalto no te lo quita nadie, pero hay que analizar la gravedad de ese 404, se puede tratar sencillamente de una página que ya no existe, por ejemplo en un ecommerce un producto dado de baja, en este caso lo óptimo sería redirigir con un 301 a la categoría del producto para que el usuario encuentre productos similares. Sería el caso de un 404 leve.
- La siguiente alerta es cuando un usuario encuentra códigos de estado http 404 porque ha escrito mal la url, como es prácticamente imposible detectar todos esps errores a menos de que te avisen, lo mejor es ser un poco imaginativo y en lugar de mostrar simplemente un mensaje de error, diseñar una página 404 con enlace a recursos dentro de la web que impidan que el usuario abandone tu web, incluso por que no incluir en esa página 404 algunos productos destacados de tu web para que el usuario siga navegando.
- Enlaces rotos, quizá sean los códigos de estado http 404 más graves ya que son errores de enlace dentro de tu propia web, hay muchas formas de ver que enlaces rotos existen en tu web, puedes utilizar herramientas gratuitas como Screaming Frog que te permite en su versión gratuita rastrear hasta 500 url, o herramientas de pago como Semrush o Sistrix que te darán mucha más información.
- 405 (Method Not Allowed), el navegador ha utilizado un método (
GET
,POST
, etc.) no permitido por el servidor para obtener ese recurso. - 406 (Not Acceptable), el recurso solicitado tiene un formato que en teoría no es aceptable por el navegador, según los valores que ha indicado en la cabecera
Accept
de la petición. - 407 (Proxy Authentication Required), es muy similar al código
401
, pero en este caso, el navegador debe autenticarse primero con un proxy. - 408 (Request Timeout), el navegador ha tardado demasiado tiempo en realizar su petición y el servidor ya no espera esa petición. No obstante, el navegador puede realizar nuevas peticiones cuando quiera.
- 409 (Conflict), la petición del navegador no se ha podido completar porque se ha producido un conflicto con el recurso solicitado. El caso más habitual es el de las peticiones de tipo
PUT
que intentan modificar un recurso que a su vez ya ha sido modificado por otro lado. - 410 (Gone), no es posible encontrar el recurso solicitado por el navegador y esta ausencia se considera permanente. Si existe alguna posibilidad de que el recurso vuelva a estar disponible, se debe utilizar el código
404
. - 411 (Length Required), el servidor rechaza la petición del navegador porque no incluye la cabecera
Content-Length
adecuada. - 412 (Precondition Failed), el servidor no es capaz de cumplir con algunas de las condiciones impuestas por el navegador en su petición.
- 413 (Request Entity Too Large), la petición del navegador es demasiado grande y por ese motivo el servidor no la procesa.
- 414 (Request-URI Too Long), la URI de la petición del navegador es demasiado grande y por ese motivo el servidor no la procesa (esta condición se produce en muy raras ocasiones y casi siempre porque el navegador envía como
GET
una petición que debería serPOST
). - 415 (Unsupported Media Type), la petición del navegador tiene un formato que no entiende el servidor y por eso no se procesa.
- 416 (Requested Range Not Satisfiable), el navegador ha solicitado una porción inexistente de un recurso. Este error se produce cuando el navegador descarga por partes un archivo muy grande y calcula mal el tamaño de algún trozo.
- 417 (Expectation Failed), la petición del navegador no se procesa porque el servidor no es capaz de cumplir con los requerimientos de la cabecera
Expect
de la petición. - Los códigos de estado http 418 al 420 no están asignados por ahora
- 422 (Unprocessable Entity (WebDAV)), la petición del navegador tiene el formato correcto, pero sus contenidos tienen algún error semántico que impide al servidor responder.
- 423 (Locked (WebDAV)), el recurso solicitado por el navegador no se puede entregar porque está bloqueado.
- 424 (Failed Dependency (WebDAV)), la petición del navegador ha fallado debido al error de alguna petición anterior (por ejemplo una petición con el método
PROPPATCH
). - 426 (Upgrade Required), el navegador debe cambiar a un protocolo diferente para realizar las peticiones (por ejemplo
TLS/1.0
). - 428 (Precondition Required), el servidor requiere que la petición del navegador sea condicional (este tipo de peticiones evitan los problemas producidos al modificar con
PUT
un recurso que ha sido modificado por otra parte). - 429 (Too Many Requests), el navegador ha realizado demasiadas peticiones en un determinado período de tiempo (se utiliza sobre todo para forzar los límites de consumo de recursos de las APIs).
- 431 (Request Header Fileds Too Large), el servidor no puede procesar la petición porque una de las cabeceras de la petición es demasiado grande. Este error también se produce cuando la suma del tamaño de todas las peticiones es demasiado grande.
- Los códigos de estado http 432 al 499 no se utilizan por ahora.
Códigos de estado http 5XX
Los códigos de estado http 500 son siempre del lado del servidor y mi experiencia me dice que se resuelven como por arte de magia en cuanto contactas con el soporte técnico del servidor, aún así los incluyo para que sepas que indica cada uno de los errores y puedas informar a tu servicio técnico con el máximo de información posible.
- 500 (Internal Server Error), la solicitud del navegador no se ha podido completar porque se ha producido un error inesperado en el servidor. El servidor se ha caido, no preguntes porque, volverá a funcionar de la misma forma que dejó de hacerlo.
- 501 (Not Implemented), el servidor no soporta alguna funcionalidad necesaria para responder a la solicitud del navegador (como por ejemplo el método utilizado para la petición).
- 502 (Bad Gateway), el servidor está actuando de proxy o gateway y ha recibido una respuesta inválida del otro servidor, por lo que no puede responder adecuadamente a la petición del navegador.
- 503 (Service Unavailable), el servidor no puede responder a la petición del navegador porque está congestionado o está realizando tareas de mantenimiento.
- 504 (Gateway Timeout), , el servidor está actuando de proxy o gateway y no ha recibido a tiempo una respuesta del otro servidor, por lo que no puede responder adecuadamente a la petición del navegador.
- 505 (HTTP Version Not Supported), el servidor no soporta o no quiere soportar la versión del protocolo HTTP utilizada en la petición del navegador.
- 506 (Variant Also Negotiates), el servidor ha detectado una referencia circular al procesar la parte de la negociación del contenido de la petición.
- 507 (Insufficient Storage (WebDAV)), el servidor no puede crear o modificar el recurso solicitado porque no hay suficiente espacio de almacenamiento libre. Ve pensando en contratar un hosting en otro proveedor, este error no debe aparecer nunca, ya que antes de llegar al límite te han de avisar.
- 508 (Loop Detected (WebDAV)), la petición no se puede procesar porque el servidor ha encontrado un bucle infinito al intentar procesarla. Uno de los códigos de estado http habituales, el servidor ha entrado en un bucle que no sabe resolver, normalmente por peticiones PhP extrañas, revisa también las peticiones en tu web, ya que no siempre es problema del servidor.
- 510 (Not Extended), la petición del navegador debe añadir más extensiones para que el servidor pueda procesarla.
- 511 (Network Authentication Required), el navegador debe autenticarse para poder realizar peticiones (se utiliza por ejemplo con los portales cautivos que te obligan a autenticarte antes de empezar a navegar).
- Códigos de estado http 512 al 599 no se utilizan en la actualidad.
Espero que con este listado de códigos de estado http tus dudas sobre el comportamiento de tu navegador queden más o menos resueltas, una de las cuestiones que también has de contemplar ante estos errores es probar con un navegador distinto y tener siempre el navegador lo más actualizado para minimizar la aparición de estos errores en los códigos de estado http.