

Los cgi-bin son programas que se ejecutan en el servidor, pueden servir para tratar información, como pasarela con una aplicación o base de datos o para generar documentos html de forma automática.
Como se vió con anterioridad, una de las principales utilidades de los cgi-bin es tratar los resultados de un formulario (FORM).
Estos programas pueden ser escritos en cualquier tipo de lenguaje de programación y son ejecutados en el servidor cuando se realiza su referencia. Algo importante es que el programa debe ser ejecutable en el servidor, por tanto al ser el servidor una maquina UNIX, no se puede utilizar por ejemplo los compiladores de los PC, sino los del servidor.
Los lenguajes más comunes para escribir estos programas son el lenguaje perl, C ó bien un script escrito en cualquier shell (csh, sh, ksh ó zsh).
Algo importante es que los cgi-bin deben tener una extensión especial .cgi, o bien, encontarse en un directorio especial llamado cgi-bin. Cuando se referencie en una pagina html un binario, cualquier fichero con la extensión cgi, en el servidor se ejecutará este programa y la salida se enviará al cliente de la WWW.
Para que sea posible ejecutar el binario (cgi-bin), será necesario que el fichero tenga los permisos de forma correcta, para ello tendrá que ejecutar en Unix el siguiente comando:
www2> chmod 755 programa.cgi
Con esto el programa será ejecutable por el servidor.
Los cgi-bin se podrán escribir con las instrucciones normales del lenguaje de programación pero hay ciertos aspectos a tener en cuenta:
Para pasar datos el servidor al cgi-bin utiliza una serie de variables de entorno, que quedan definidas al ejecutar el script. Las variables de entorno más interesantes son:
El método por el que se realiza la llamada al script, este puede ser GET o POST como se explicó anteriormente cuando se habla de los formularios.
El cgi-bin puede ser llamado directamente desde el cliente, en esta variable se incluirá toda la información que siga al nombre del cgi-bin, por ejemplo:
http://www2.uca.es/binarios/cgibin.cgi/camino/fichero
PATH_INFO = /camino/fichero
Será la información adicional que se añade tras el nombre de cgi-bin.
La información que se incluye será pasada de forma codificada al cgi-bin, de forma que los espacios se convierten en signos '+' y los caracteres especiales se codifican de la forma %xx, donde xx el código ASCII en hexadecimal del caracter. Esto debe ser tenido en cuenta cuando se interprete la informació obtenida en formato URL.
Una versión decodificada de PATH_INFO, obtiene el camino y lo convierte de camino virtual (en referencia del servidor) a camino real (camino completo).
Nombre por el que fue llamado el cgi-bin.
La información que sigue al símbolo ? en la URL que referencia al cgi-bin. Será algún tipo de consulta que se realice al cgi-bin. No necesita ser decodificada de ninguna manera.
Cuando se utiliza el método GET las variables del formulario se pueden interpretar con esta variable de entorno.
El formato en que se envian estas variables es el siguiente:
?variable1=valor1&variable2=valor2& ... &variablen=valorn
El ordenador desde el que se ejecuto el cgi-bin.
Dirección IP del ordenador remoto que ejecuto el cgi-bin.
El número de caracteres enviados por el cliente al cgi-bin.
El cliente de la WWW que ejecuta el cgi-bin, el formato general es:
programa/versión libreria/versión
El cgi-bin podría enviar un distinto código HTML según cada cliente.
Para los formularios que utilizan el método POST, la información es enviada al cgi-bin por la entrada estándar (stdin).
El servidor envía las variables de entorno CONTENT_LENGTH y CONTENT_TYPE indicando la longitud y el tipo de datos enviados. El servidor no esta obligado a enviar una marca de final de fichero tras los datos enviados, por tanto la variable CONTENT_LENGTH debe ser tenida en cuenta para determinar la cantidad de datos enviados. CONTENT_TYPE suele contener el valor application/x-www-form-urlencoded, que indica que se trata de información con codificación URL.
En esta codificación como se vio antes los espacios se convierten en signos '+' y los caracteres especiales se codifican de la forma %xx, donde xx el código ASCII en hexadecimal del carácter. Por tanto esto debe ser tenido en cuenta cuando se interpreten los datos enviados del formulario. Las variables del formulario se enviarán de la forma:
variable1=valor1&variable2=valor2& ... &variablen=valorn
El cgi-bin debe enviar sus datos a la salida estándar (stdout), esta salida puede ser un documento generado por el cgi-bin o instrucciones al servidor para obtener el documento correcto.
La salida del cgi-bin debe comenzar con una pequeña cabecera que identificará al documento. Las directivas que definen esta cabecera serán:
Es el tipo MIME del documento que se retorna. Si tuviera el valor text/html la salida se interpretaría como código html. Por tanto la salida del cgi-bin podría contener instrucciones HTML que serian interpretadas correctamente por el cliente. Otros valores que puede tomar son: text/plain para texto normal ó image/gif, la salida se interpreta como una imagen GIF.
Por ejemplo:
printf ( "Content-type: text/html\n\n" );
Sería el comienzo de la salida de cgi-bin escrito en C que comienza a generar código html.
Indicará al servidor que se esta enviado la referencia a un documento en lugar del documento en sí. Si el valor es una URL, el servidor indicará al cliente que debe realizar un redireccionamiento a esa dirección.
Esta permitido el uso de información adicional (PATH_INFO) y la directiva ?, pero no la directiva # para indicar un punto determinado dentro de un documento.
Indicará un código de estado para indicar errores. El formato
será nnn xxxxxxx, donde nnn es un número de
tres dígitos y xxxxxxx es una cadena de caracteres.
Tras la cabecera se incluirán dos caracteres de retorno de carro ( Despues de definida la cabecera se podrá generar la salida del cgi-bin, que
se interpretará segú el valor dado a Content-type.