Básicamente, un CGI (Common Gateway Interface) es el protocolo estándar HTTP/1.0 para comunicación entre el servidor y los programas adicionales ubicados en él. De hecho, es un pequeño código de programa que se ejecuta en los servidores web, y que permite la interacción con el usuario, ofreciendo un aspecto dinámico a las páginas web. El significado de la sigla CGI es el siguiente:
CGI es, pues, una interfaz entre servidores de información y programas de aplicación, y por lo tanto define una serie de reglas que deben cumplirse tanto por parte de las aplicaciones como de los servidores, para hacer posible la presentación de resultados de programas ejecutables en tiempo real mediante servicios de información estandarizados. Por este motivo, hablamos del CGI como pasarela o gateway entre dos niveles de aplicación. | |||||||||||||||
![]() |
A diferencia de un documento simple de HTML, que es administrado por el servidor y estático, es decir, un fichero de texto que no cambia, un programa CGI se ejecuta en tiempo real, de modo que puede reportar información dinámica. Por ejemplo, supongamos que queremos poner una base de datos en Oracle a disposición de todos los internautas que puedan consultarla. Esto resultará más o menos complejo, pero lo que necesitaríamos sería crear un programa de CGI que sea ejecutado por el servidor web, para poder así transferir la consulta hacia la base de datos y devolver los resultados al navegador cliente. Por el hecho de tratarse de una pasarela, no hay ningún tipo de dependencia con el lenguaje de programación que se quiera utilizar. Es posible escribir un programa CGI en diferentes lenguajes, ya sean compilados o interpretados, con la condición de que puedan ser ejecutados en el sistema del servidor web. De este modo, podremos encontrar CGI escritos en C, C++, Pascal, PERL, TCL, Delphi, etc. Normalmente, sin embargo, se suele utilizar PERL para escribir guiones de CGI. Quizá la razón se encuentra en las características de este lenguaje de programación: "Perl es un lenguaje interpretado, optimizado para analizar ficheros de texto arbitrariamente, extraer información e imprimir informes a partir de esta información". Ya que la mayor parte de la funcionalidad de los CGI supone tratar datos y acceder a programar diferentes apliques, Perl proporciona herramientas para realizar estas tareas de una manera sencilla. Los lenguajes interpretados, como por ejemplo TCL o PERL, resultan más dinámicos en el momento de llevar a cabo el mantenimiento y las depuraciones que hagan falta, y acostumbran a ser lenguajes de alto nivel, por lo que no permiten realizar ciertas operaciones con la memoria (la seguridad es básica en sistemas de servidor), y es más difícil dejarse algún proceso descontrolado en el sistema, ya que enseguida detectaremos el error. La parte menos positiva de los lenguajes interpretados es que no son tan rápidos como los lenguajes compilados. Este tema es fundamental, ya que en el caso de un CGI la velocidad de ejecución es muy importante, porque tendremos que sumar diferentes procesos como el tiempo propio de ejecución, la velocidad de transferencia de la red y los tiempos de espera en la interrogación al sistema o a una base de datos. Todo este tiempo tiene que ser el mínimo, ya que lo sufrirá el usuario. La manera en la que interactúa un CGI con un formulario o una solicitud de página puede verse en el siguiente gráfico: | ||||||||||||||
![]() |
Las aplicaciones CGI acostumbran a residir en un directorio especial de los servidores web. El más común es "/cgi-bin/", o "/cgi-local/", de modo que sólo los programas CGI que han sido almacenados en ellos son operativos, y así se evita que funcionen en cualquier otro directorio. Pensemos que es muy importante la seguridad en el servidor web cuando se ejecutan programas, ya que las configuraciones de directorios y sistemas que no son completamente seguras pueden ocasionar muchos quebraderos de cabeza. Realmente, es posible desarrollar casi cualquier aplicación con CGI, pero sus tareas principales se han enfocado hacia: | ||||||||||||||
![]() |
|
||||||||||||||
![]() |