El blog de bCube

[bCube CMS]: Errores 500 fantásticos y dónde encontrarlos

Escrito por Bitban Team | 22-mar-2023 13:13:00

¿Alguna vez te has encontrado con un error 500? Seguro que sí, ya que es el segundo más popular después del error 404 (not found) y nos indica que es posible que el servidor tenga algún problema temporal. Pueden producirse por un error de código a la hora de programar y cuando aparecen, no queda más remedio que esperar y probar de nuevo más tarde.

 

Es muy importante solucionar los errores 5.XX ya que, además de provocar frustración y mala experiencia de usuario, también afectan al SEO. En total, nos podemos encontrar con 11 tipos de errores del servidor:

  • El genérico Error 500. Internal Server Error: que significa que el servidor ha encontrado una condición inesperada y no puede cumplir con la solicitud. No especifica el problema concreto, ya que no está claro lo que no funciona. Muchos sitios y servidores web personalizan esta página de error. 

  • Error 501. Not Implemented: el servidor no reconoce el método de solicitud o no tiene capacidad para cumplir con ella. Por lo general, esto implica que hay disponibilidad futura (por ejemplo, una nueva característica de una API del servicio web).

  • Error 502. Bad Gateway: el servidor de origen no se está comunicando con el de enlace (gateway) ya que, o no ha recibido ninguna respuesta, o una no válida. 

  • Error 503. Service Unavailable: es decir, servicio no disponible, que le indica al cliente que el servidor está desconectado momentáneamente. 

  • Error 504. Gateway Timeout: en este caso, el servidor está actuando como una gateway o proxy y no ha recibido respuesta del servidor.

  • Error 505. HTTP Version Not Supported: el Servidor no soporta la versión del protocolo HTTP que se le pidió. 

  • Error 506. Variant Also Negotiates: la petición tiene referencias circulares.

  • Error 507. Insufficient Storage: el servidor no tiene espacio suficiente para completar la petición.

  • Error 508. Loop Detected: el servidor ha detectado un bucle infinito. 

  • Error 510. Not Extended: el servidor requiere de extensiones para completar la petición.

  • Error 511. Network Authentication Required: el cliente necesita identificarse.




Equivocaciones de código

Estos errores 5XX en los entornos productivos pueden estar provocados por las equivocaciones en el código a la hora de programar, causando gran tristeza y sufrimiento. Al usar expresiones regulares, siempre tenemos que ajustarlas para evitar que sean muy pesadas de ejecutar. Esto es especialmente importante cuando se encadenan varios .+ o .* seguidos. La diferencia en tiempo de ejecución puede ser abismal, de varios segundos a unas pocas centésimas, sobre todo cuando el texto a matchear es relativamente grande (por ejemplo, el body de un contenido).

Es lo que nos pasó en uno de nuestros clientes, cuando algunas páginas de AMP estaban dando error 504 porque tardaban demasiado tiempo en generarse. Tirando del hilo, vimos que el problema es que se atascaba al hacer varios preg_match de este tipo:

Si se analiza la expresión regular, el código matchea párrafos HTML que contengan imágenes. Ejecutar ese preg_match contra el body de una noticia algo extensa tarda varios segundos. El motivo de esa lentitud es que estamos usando varios .* y .+ en la misma regexp, y esto provoca que cueste muchísimo evaluarlos, debido a la cantidad de backtracks que tiene que hacer el motor de expresiones regulares.

Si cambiamos varios de esos .* (cualquier carácter, repetido 0-N veces) por algo más específico como [^>]* (cualquier carácter salvo >, repetido N veces), la expresión regular resultante es muchísimo más rápida. Para los .* que no podamos hacer más específicos, usaremos el modificador ? (not greedy).

Regex101 es una de las mejores herramientas para probar y depurar expresiones regulares en línea. Gracias a esta consola interactiva, puedes crear tus expresiones y ver cómo afecta a un conjunto de datos en vivo, todo en una pantalla al mismo tiempo.