Post Actualizado en julio 24, 2013


¿Qué es el CGI?

Al inicio, cunado el Internet estaba dando sus primeros pasos, lo único que se lograba mostrar eran imágenes, textos y enlaces, sin embargo no existían una interactividad entre el usuario o cliente y la página de Internet. La introducción de plugins fue uno de los primeros intentos de crear esta interactividad, de estos intentos, tenemos […]

Al inicio, cunado el Internet estaba dando sus primeros pasos, lo único que se lograba mostrar eran imágenes, textos y enlaces, sin embargo no existían una interactividad entre el usuario o cliente y la página de Internet. La introducción de plugins fue uno de los primeros intentos de crear esta interactividad, de estos intentos, tenemos hoy en día flash entre otros.

La opción con mayor impacto en ese momento fue el CGI (Common Getway Interface) y es una de las primeras formas en que se podía programar una página Web de forma dinámica.

El centro de la idea de un CGI es que un cliente, en este caso un navegador, envíe datos a un programa que corre del lado del servidor, y de esta forma ejecute una serie de sentencias que arrojarán una salida en presentación de página Web. De esta manera se puede procesar dinámicamente un sitio Web, y hacerlo interactuar con el servidor de forma inteligente.

El CGI es utilizado comúnmente para contadores, bases de datos, motores de búsqueda, formularios, generadores, de email automático, foros de discusión, chats, electrónico, y mapas de imágenes, juegos en línea y otros. Esta tecnología tiene la ventaja de correr en el servidor cuando el usuario lo solicita por lo que es dependiente del servidor de dominio y no de la computadora del usuario.

Los programas que cumplen la función llevar acabo el CGI del lado del servidor están escritos comúnmente con Perl que se ha convertido prácticamente en el rey del CGI o Java, aunque en un principio se solía utilizar lenguajes de programación de bajo nivel como C o C++. Los problemas de seguridad al utilizar C y C++ además de un mayor tiempo de desarrollo en estos ha desaparecido casi por completo el uso de estos últimos lenguajes.

Pero cuales son los mensajes que se intercambian entre el servidor y el cliente.

QUERY_STRING (Es la cadena de entrada del CGI con GET), CONTENT_TYPE (Tipo MIME mediante POST), CONTENT_LENGTH (Longitud en bytes de los datos con POST), REQUEST_METHOD (Nombre del método GET o POST), CRIPT_NAME (Nombre del CGI invocado), SERVER_PORT(puerto de conexión) SERVER_PROTOCOL (protocolo en uso), SERVER_SOFTWARE (software del servidor) SERVER_NAME (Nombre del servidor) GATEWAY_INTERFACE (nombre de la interfaz).

El cliente envíala información al servidor mediante una entrada donde se indica el servidor y el script separado de un signo de interrogación de los valores y parámetros que se envían:

http://www.algunservidor.com/cgi-bin/script.pl? nombre=Julio

Para ver un ejemplo sencillo hemos creado un script CGI en Perl que permite ver todas la variables del ambiente en que corre:

#!/usr/bin/perl

print "Content-type: text/htmlnn";
print "Environmentn";
foreach (sort keys %ENV)
{
print "$_: $ENV{$_}
n";
}

1;

Con la siguiente salida:

Environment DOCUMENT_ROOT:/home/martes/public_html
GATEWAY_INTERFACE:CGI/1.1
HTTP_ACCEPT:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
HTTP_ACCEPT_CHARSET:ISO-8859-1,utf-8;q=0.7,*;q=0.7
HTTP_ACCEPT_ENCODING:gzip,deflate
HTTP_ACCEPT_LANGUAGE:es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
HTTP_CONNECTION:keep-alive
HTTP_COOKIE:SESS9c8e66c26b0418e839e6eb17cfa53363=248d0d8e8d218cf387df5177cc259c21
HTTP_HOST:marte.profusehost.net
HTTP_KEEP_ALIVE:300
HTTP_USER_AGENT:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; es-ES; rv:1.9.0.5) Gecko/2008120121 Firefox/3.0.5
PATH:/usr/local/bin:/usr/bin:/bin
QUERY_STRING:
REMOTE_ADDR:189.245.27.211
REMOTE_PORT:50989
REQUEST_METHOD:GET
REQUEST_URI:/cgi-bin/dos.pl
SCRIPT_FILENAME:/home/martes/public_html/cgi-bin/dos.pl
SCRIPT_NAME:/cgi-bin/dos.pl
SERVER_ADDR:208.87.241.96
SERVER_ADMIN:webmaster@marte.profusehost.net
SERVER_NAME:marte.profusehost.net
SERVER_PORT:80
SERVER_PROTOCOL:HTTP/1.1
SERVER_SIGNATURE:
Apache/2.0.63 (Unix) mod_ssl/2.0.63 OpenSSL/0.9.8e-fips-rhel5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 PHP/5.2.6 Server at marte.profusehost.net Port 80

SERVER_SOFTWARE:Apache/2.0.63 (Unix) mod_ssl/2.0.63 OpenSSL/0.9.8e-fips-rhel5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 PHP/5.2.6
UNIQUE_ID:3xAiCNBX8V8AAFpiozQAAAAR

En futuros artículos incluiremos los pasos básicos en Perl para poder crear nuestros propios scripts CGI. Como vemos es necesario que el servidor tenga instalado un intérprete Perl en el sistema y que tenga especificado con claridad que se permite el uso de CGI en las cuentas de hosting. Algunos servidores también admiten CGI en otros lenguajes como Python o Ruby.