14.3. Programar para la RED

14.3.3. Common Gateway Interface (CGI)

La CGI, es un estandar que sirve para interconectar aplicaciones con servidores WEB. La mayor parte de las páginas Web, son estáticas, es decir, se basan en ficheros HTML que no cambian, mientras que los programas CGI se ejecutan en tiempo real y pueden devolver información dinámica.

Para que los usuarios de la Web accedan a las bases de datos y las consulten, es necesario utilizar la CGI. Para ello es necesario crear un programa CGI que el servidor Web ejecute, procesando la consulta, realizando las peticiones a la Base de datos y devolviendo la respuesta mediante el formateo HTML de los resultados.

Puesto que los programas CGI sólo procesan un flujo de entrada y envían un flujo de datos a la salida, pueden escribirse en cualquier lenguaje de programación. La única limitación estriba en las capacidad del servidor, y en la posibilidad del lenguaje para adaptarse a la arquitectura sobre la que se asiente el servidor.

La CGI necesita que se ejecute un programa en el servidor Web, por lo que es necesario adoptar medidas de seguridad, ya que de lo contrario los usuarios podrían sustituir los programas CGI por implementaciones con diabluras.

En los sistemas basados en UNIX, los programas están escritos en PERL o C, mientras que en los basados en Windows, se pueden escribir en cualquier lenguaje compatible con él.

Cuando un cliente pide la URL que corresponde a un programa CGI, el servidor ejecuta el programa, y genera una salida que fluye a través del servidor HTTP al cliente.

La información pasa al programa a través de las variables de entorno y del flujo de datos de entrada estándar. Se pueden utilizar dos métodos para pasar datos del formulario del servidor al programa CGI: el método GET, pasa los datos de formulario a la variable QUERY_STRING, mientras que el método POST pasa la información a través de la entrada estándar.

Ambos métodos devuelven datos del formulario en un formato especial. El formulario HTML etiqueta cada elemento de entrada con una etiqueta NAME. Los métodos devuelven los datos del formulario como una cadena de pares de "nombre=valor" (Value=15). Estos valores están separados por el carácter & y están codificados por URL, es decir, los espacios son sustituidos por signos "mas" (+) y algunos caracteres están codificados en hexadecimal.

Una de las partes más importantes dentro de la programacion CGI, es formatear adecuadamente la salida del programa para que el servidor pueda interpretarla. Los programas CGI pueden devolver muchos tipos de datos, desde texto simple o documentos HTML, hasta imágenes y clips de audio, así como referencias a otros documentos.

HTTP es un protocolo sin estado (cada petición es completamente independiente de las que le preceden), de modo que el servidor no tiene ninguna forma de correlacionar una petición de URL a partir de las anteriores.

Para solucionar estos problemas se adjunta a la URL un signo "?", seguido por algún tipo de información. El signo de interrogación actúa como separador especial que delimita las variables al final de un URL.

Por ejemplo supón que estas creando un sitio comercial en el que los usuarios tienen "cestas de compra" de elementos que quieren comprar. Cada vez que un usuario elige otro elemento, el destino lo añade a la lista de elementos de la cesta. Si el usuario ha comprado tres unidades del elemento numero 101 y cinco del elemento 202 y está en el proceso de comprar cinco del 123, el URL que se genera es el siguiente:

La primera parte "Http://www.org.com/cgi-bin/shop.html" indica el documento real. El "?" separa el documento de las variables y por fin se indican tres pares de variables "items=3+101+5+202", "add=123" y "quan=5".

Ejemplos de CGI, se pueden observar contínuamente, especialmente en las URL, que se generan cuando realizamos búsquedas en los buscadores.

El código HTML, en general, se inserta en ficheros. El diálogo entre el cliente (Mosaic, Netscape,...) y el servidor (NCSA, Cern, Netsite,...) se desarrolla de la siguiente forma:

Los ficheros que contienen el código HTML pueden ser accedidos en todo momento por parte de un cliente, por lo que no deben ser modificados. Si un cliente hace una petición de un fichero en curso de modificación corre el riesgo de tener una versión incoherente del mismo. Esto impide la creación de documentos dinámicos, como por ejemplo una consulta a una base de datos.

La idea de la programación en CGI (Common Gateway Interface) es construir el documento HTML correspondiente a un enlace hipertexto en el mismo momento en que se pulsa sobre el enlace. El documento se envía al cliente a medida que se construye sin almacenarse nunca en un fichero.

Esto se realiza por medio de enlaces ejecutables. El cliente indica el nombre de un fichero, siempre mediante un URL, no para recibir el contenido sino para solicitar su ejecución en el servidor. Este ejecuta el programa indicado y devuelve al cliente la salida estándar de dicho programa (es decir, lo que se hubiera obtenido en la pantalla al ejecutar el programa manualmente desde la línea de comandos). Esta salida estándar es lo que constituye el documento HTML. Los programas ejecutados a partir de enlaces ejecutables se denominan scripts CGI.