Publicado el 8 de Junio del 2018
334 visualizaciones desde el 8 de Junio del 2018
463,2 KB
25 paginas
Creado hace 20a (22/07/2003)
Javier E. Pérez Delgado
Javier Pérez Delgado
Tutorial de CGI
INTRODUCCIÓN
El CGI (Common Gateway Interface) es un estandar para comunicar
aplicaciones externas con los servidores de información, tales como servidores HTTP o
Web. Un documento en HTML que el daemon del Web se trae es estático, es decir, se
mantiene constante: un fichero de texto que no cambia. Un programa CGI, por otro lado
es ejecutado en tiempo real, así que puede generar información dinámica.
Por ejemplo, supongamos que quieres enganchar tu base de datos de Unix al
WWW, para permitir a gente de todo el mundo consultarla. Básicamente se necesitará
un programa CGI que el daemon del Web ejecutará para transmitir la información al
gestor de base de datos, y recibir los resultados para presentarselos al cliente. Este es un
ejemplo de pasarela (gateway), y es lo que CGI, actualmente en su versión 1.1, tiene en
sus orígenes.
El ejemplo de la base de datos es una idea sencilla, pero la mayoría de las veces
dificil de implementar. Realmente no hay límite con lo que tu quieras enganchar al
Web. La íunica cosa que debes recordar es que haga lo que haga tu progrma CGI, no
deberá tardar mucho tiempo en procesar. De otra manera, el usuario estaría esperando
con su navegador a que algo pase.
Especificaciones
Como un programa CGI es un ejecutable, es equivalente a dejar a el mundo
ejecutar un programa en tu sistema, que no es lo mas seguro a hacer. Por ello existen
una serie de precauciones de seguridad que son necesarias de implementar cuando se
usan programas CGI. Probablemente la que afectará al usuario típico del Web, es que
hecho de que los programas CGI necesitan residir en un directorio especial, así el
servidor sabe que tiene que ejecutarlo, en vez de simplemente mostrarlo por pantalla.
Este directorio está generalmente bajo el control del webmaster, prohibiendo al usuario
medio crear programas CGI. Hay otros métodos para permitir el accesos a scripts CGI,
pero depende del webmaster que se te de esta posibilidad. Así que deberás contactar con
tu webmaster para consultar la factibilidad de permitirte un acceso a los CGI.
Si dispones de una versión del servidor HTTPd NCSA, verás un directorio
denominado /cgi-bin. Este es el directorio especial antes mencionado, donde todos los
programas CGI residen. Un programa CGI se puede escribir en cualquier lenguaje que
permita ser ejecutado en el sistema, como:
C/C++
Fortran
PERL
TCL
Algún Shell de Unix
Visual Basic
AppleScript
Simplemente depende de lo que tengas en tu sistema. Si usas un lenguaje de
programación como C o Fortran, como ya sabrás, debes compilar el programa antes de
2
Javier Pérez Delgado
Tutorial de CGI
poder ejecutarlo. Si miras en el directorio /cgi-src, encontrarás el código fuente de
algunos programas CGI del directorio /cgi-bin. Pero, si usas alguno de los lenguajes
interpretados, como PERL, TCL, o un shell de Unix, el script simplemente necesita
residir en el directorio /cgi-bin, ya que no tiene un código fuente asociado. Mucha gente
prefiere escribir scripts CGI en vez de programas, ya que son más fáciles de depurar,
modificar y mantener que un programa típico compilado.
¿Qué es el directorio cgi-bin?
Este es un directorio especial, que contiene los scripts, configurado dentro del
servidor http. El servidor conoce que este directorio contiene ejecutables que deberán
ser ejecutados y su salida deberá ser enviada al navegador del cliente. No se puede
simplemente crear un directorio cgi-bin, el administrador del servidor deberá
configurarlo para su uso. Si no está configurado, los scripst serán cargados como
simples ficheros de texto.
Algunos servidores están configurados de tal manera que los ficheros con una
determinada extensión (generalmente .cgi) son reconocidos como scripts y serán
ejecutados como si estuvieran en un directorio cgi-bin.
Nota: No deberemos confundirlo con html analizado (generalmente .shtml)
La configuración de los directorios, o de la extensión mencionada antes, depende
únicamente del servidor. Comprueba la documentación sobre tu servidor, o pregunta a
otro usuario que también lo use.
¿Qué parte es Perl, y qué parte es html?
El formulario que se presenta al usuario está escrito en html, y este llama al script en el
servidor escrito en perl . El script devolverá en la mayoría de los casos código html para
presentar al usuario.
VARIABLES DE ENTORNO EN CGI
3
Javier Pérez Delgado
Tutorial de CGI
El servidor usa tanto de líneas de comando, como variables de entorno para
pasar los datos del servidor al script.
Estas variables de entorno se activan cuando el programa ejecuta el programa
cgi.
Especificación
Las siguientes variables no dependen de la información enviada y son activadas
en todos los casos:
SERVER_SOFTWARE
Devuelve el nombre y la versión del software del servidor de información que
contesta la petición de usuario (y ejecuta el programa cgi).
Formato: nombre/versión.
SERVER_NAME
Devuelve nombre de host del servidor, el alias DNS, o la dirección IP como
aparecería en las URL autoreferenciadas.
GATEWAY_INTERFACE
Devuelve la revisión de la especificación CGI con que el servidor puede
trabajar. Formato: CGI/revisión.
Las siguientes variables de entorno son específicas de la petición de usuario, y
es el programa del gateway el que las da el valor:
SERVER_PROTOCOL
Da el nombre y revisión del protocolo de información con el que la peticion de
usuario viene. Formato: protocolo/revisión.
SERVER_PORT
Devuelve el número de puerto por el cual fue enviada la petición.
REQUEST_METHOD
Devuelve el método por el cual la petición fue enviada. Para HTTP serán
"GET", "HEAD", "POST", etc.
PATH_INFO
La información extra sobre el path, tal como es dada por el cliente. En otras
palabras, podemos acceder a los scripts por su pathname virtual, seguido de alguna
4
Javier Pérez Delgado
Tutorial de CGI
información extra. Esa información extra es enviada como PATH_INFO. La
información será decodificada por el servidor si viene de una URL antes de pasarla al
script CGI.
PATH_TRANSLATED
El servidor proporciona una versión traducida del PATH_INFO, que transforma
el path virtual al físico.
SCRIPT_NAME
Path virtual al script que va a ejecutar, usado para autoreferenciar URL.
QUERY_STRING
La información que sigue al signo ‘?’ en la URL que referencia al script. Es la
información de la pregunta. No deberá ser decodificada de ningún modo. Esta variable
será activada cuando hay una petición de información, sin hacer caso de la
decodificación de la línea de comandos.
REMOTE_HOST
El nombre de host que realiza la petición. Si el servidor no posee esta
información activará REMOTE_ADDR y dejará esta desactivada.
REMOTE_ADDR
La dirección IP del host remoto que realiza la petición.
AUTH_TYPE
Si el servidor soporta autentificación de usuario , y el script está protegido, esta
es el método de autentificación específico del protocolo para validar el usuario.
REMOTE_USER
Si el servidor soporta autentificación de usuario , y el script está protegido, este
será el nombre de usuario con el que se ha autentificado.
REMOTE_IDENT
Si el servidor HTTP soporta autentificación RFC 931 , entonces está variable se
activará con el nombre del usuario remoto obtenido por el servidor. Esta varible solo se
utilizará durante el login.
CONTENT_TYPE
Para peticiones que tienen información añadida, como HTTP POST y PUT, este
será el tipo de datos contenido.
5
Javier Pérez Delgado
Tutorial de CGI
CONTENT_LENGTH
La longitud del contenido tal como es dado por el cliente.
Además, las líneas de la cabecera recibidas por el cliente, si las hay, son
colocadas en el entorno con el prefijo HTTP_ seguido del nombre de la cabecera. Cada
carácter de el nombre de la cabecera se cambia por caracteres _. El servidor puede
excluir algunos caracteres que ya haya procesado, como la autorización.
El tipo de contenido y la longitud de este, pueden ver suprimidas sus cabeceras
si al incluirlos se excede el límite de entorno del sistema.
Un ejemplo de esto es la variable HTTP_ACCEPT que se definió en CGI/1.0.
Otro ejemplo es la cabecera USER_AGENT.
HTTP_ACCEPT
Los tipos MIME que el cliente aceptará, como son dados por las cabeceras
HTTP. Otros protocolos pueden ser necesarios para obtener esa información de algún
otro lugar. Cada elemento de esta lista deberá estar separado por comas por la
especificación HTTP.
Formato: tipo/subtipo, tipo/subtipo
HTTP_USER_AGENT
El navegador que el cliente usa para mandar la petición.
Formato general: software/versión librería/versión.
LEYENDO EL FORMULARIO DE ENTRADA DE
USUARIO
Cuando el usuario envía el formulario, el script recibe los datos como pares
nombre-valor. Los nombres son lo que definimos en las etiquetas INPUT (o las
etiquetas SELECT o TEXTAREA), y los valores aquello que el usuario haya escrito o
6
Javier Pérez Delgado
Tutorial de CGI
seleccionado. (Los usuarios también pueden enviar ficheros con los formularios, pero
no nos ocuparemos de ello.)
Estos pares nombre-valor llegan como una larga cadena que necesitamos
format
Comentarios de: Tutorial de CGI (0)
No hay comentarios