Introducción a los CGI

Autor: J. G. Castellano (fjgc@decsai.ugr.es)


 

1.- Introducción.

CGI son las siglas de Common Gateway Interface, un mecanismo que permite ejecutar programas activados desde un browser en un servidor Web. Este mecanismo permite la programación de páginas interactivas.

Los scripts CGI pueden generar documentos WML cuyo contenido varie dependiendo de los argumentos que se le pasen o de determinadas condiciones. De esta forma podemos hacer accesos a bases de datos, realizar compras, etc.

Al diseñar un CGI hay que crear la parte que el usuario ve, el programa y el resultado que se le presenta al usuario, es decir, el CGI debe crear la página WML que posteriormente verá el usario.

Los CGI se suelen construir con lenguajes de Script, aunque se puede utilizar cualquier lenguaje, y el más utilizado es el Perl, que será el lenguaje que utilizaremos en la mayoría de los ejemplos. Si no conoceis el lenguaje Perl aqui teneis un buen tutorial de castellano.


2.- Modo de trabajo de los CGI

Los pasos que sigue el CGI en su funcionamiento son:

  1. El browser llama a una URL que es un CGI.
  2. El servidor recibe la petición, detecta que la URL es un CGI y ejecuta el script.
  3. El script realiza unas acciones (las que se le han programado).
  4. El script formatea los resultados de forma que el browser pueda interpretarlos.
  5. El usuario ve el resultado en el browser.

Hay que tener en cuenta los siguientes puntos:

Como vemos, un CGI recibe unos datos, los procesa y devuelve otros datos (que pueden ser una página WML, imagen wbmp, página HTML, imagen jpeg, etc.). Debe quedar claro que el usurio no puede interactuar directamente con el programa CGI y para obtener ese efecto hay que usar apropiadamente el lenguaje de programación de páginas (WML en nuestro caso) y hacer llamadas a uno o varios CGI's.

La principal diferencia de un CGI con respecto a un programa WMLScript, es que el primero se ejecuta en el servidor y el segundo en el terminal WAP. Si pensamos hacer algo sencillo que puede ser hecho mediante WMLScript, es preferible usarlo antes que utilizar un CGI, pero esto no siempre es posible, por ejemplo, cuando queramos acceder a una base de datos o a cualquier otra fuente de datos del servidor como es un fichero. También hay que tener en cuenta que el programa WMLScript puede llegar al usuario el programa CGI llega nunca al terminal del usuario.


3.- Como usar CGIs

Para poder usar CGIs el servidor Web en el que tenemos nuestras páginas debe cumplir algunos requisitos. Además, generalemente, necesitaresmo permiso para usar nuestros propios CGIs. Para saber lo que tenemos que hacer en nuestro caso concreto tenemos que preguntar el encargado de mantener el sitio Web (el WebMaster).

Si tienes acceso a un servidor Web con posibilidad de albergar CGIs una vez hayas programado uno tendr´s que incluirlo en un directorio dedicado a almacenar este tipo de programas, Tu WebMaster te dirá que directorio del sistema será. Una vez dejados en su lugar correspondiente, serán accesibles mediante una URL.

En lo que se refiere a la programación del CGI, es aconsejable tener experiencia anterior en programación


4.- Configuración del servidor para permitir CGI WML

En el caso de que tú seas el WebMaster del sistema deberás configurar el servidor Web para permitir CGI que devuelvan páginas WML. Para que un servidor pueda ejecutar CGI, hay que configurar adecuadamente el daemon.

En general, los scripts deben estar en un directorio concreto reservado para los mismos, de forma que si el URL indica un fichero en ese directorio, el servidor ve que es un programa y no una página HTML.

Si utilizamos el servidor del CERN, debemos editar el fichero httpd.conf, donde encontraremos una linea del tipo:

     Exec /cgi-bin/* /home/www/cgi-bin/*

Puede haber varias líneas de este tipo, indicando que en esos directorios se pueden colocar los CGI.
La segunda parte de la línea es el nombre a usar para llamar a los CGI en las URL. La tercera parte es el camino físico en el disco donde estará los CGI.

Si utilizamos el servidor de NCSA, en el fichero srm.conf debemos añadir una línea del tipo:

     ScriptAlias /cgi-bin/ /home/www/cgi-bin/

Para configurar el servidor Apache para que permite servir páginas para móviles WAP, se ha de editar el fichero srm.conf (normalmente esta en /etc/httpd/conf/ ) y se debe añnadir las siguientes líneas en la seccion AddType (en las ultimas versiones del Apache, toda la configuracion se hace en el fichero httpd.conf):

               # MIME Types for WAP
               AddType text/vnd.wap.wml .wml
               AddType text/vnd.wap.wmlscript .wmls
               AddType application/vnd.wap.wmlc .wmlc	       	
               AddType application/vnd.wap.wmlscriptc .wmlsc
               AddType image/vnd.wap.wbmp .wbmp
Las extensiones se corresponde a WML, WML Script, las versiones compiladas de ambos tipos y a gráficos wbmp.


5.- Variables de un CGI

En los CGI hay una seri de variables de entorno a las que podemos acceder y que pueden sernos de utilidad, dichas variables de entorno son la siguientes:
VARIABLE SIGNIFICADO
SERVER_NAMEDirección IP del host donde está el CGI.
SERVER_SOFTWARETipo de servidor Web que se está usando.
GATEWAY_INTERFACEVersión del interfaz CGI.
SERVER_PROTOCOLVersión del protocolo HTTP.
SERVER_PORTEl puerto TCP que se está usando. En la mayoría de servidores Web es el 80.
REQUEST_METHODMétodo de envío de información: POST o GET.
HTTP_ACCEPTLista de los tipos MIME (content-types) que acepta el navegador.
HTTP_USER_AGENT El navegador usado por el usuario.
HTTP_REFERERDirección URL del documento HTML donde estaba el formulario.
PATH_INFOInformación extra
PATH_TRANSLATED La variable PATH_INFO adaptada al sistema específico donde está el CGI.
SCRIPT_NAMENombre del CGI.
QUERY_STRINGArgumentos pasado al CGI.
REMOTE_HOSTNombre del ordenador que envió los datos.
REMOTE_ADDRDirección IP de dicho ordenador.
REMOTE_USERNombre del usuario.
REMOTE_IDENTSirve para el método de identificación ident.
CONTENT_TYPETipo de información que llega por la entrada estándar. Por defecto será: x-www-form-urlencoded.
CONTENT_LENGTHLongitud de los datos que llegan por la entrada estándar cuando hemos usado POST.



 
Grupo GeNeura. http://geneura.ugr.es
Departamento de Arquitectura y Tecnología de los Computadores.
Universidad de Granada