CGIs para procesar formularios
Conceptos básicos
Esta es la función más común para los CGIs hoy en día. Llamar a un CGI directamente desde un enlace, como hemos hecho hasta ahora, sólo permite pasarle unos parámetros fijados al escribir el código HTML de la página. Los formularios permiten que el navegante introduzca toda clase de información, que sea mandada al servidor y procesada por el CGI. Los programas usados son los mismos que hemos visto hasta ahora.
Cómo ya vimos al hablar de formularios, la forma de indicar la dirección del programa CGI que debe procesar la información se indica en el atributo ACTION:
<form action="cgi-bin/procesaform">
</form>
Cuando el usuario pulse al botón de envío del formulario el navegador llamará al CGI y mandará con la llamada toda la información que se haya introducida. Esta información estará codificada en pares nombre_campo/valor. Además la información sufrirá una codificación especial, siguiendo las siguientes normas:
Debido a esta codificación lo primero que debe hacer todo CGI será llevar a cabo una decodificación.
GET y POST
Los dos métodos para mandar la información asociada a un formulario son GET y POST. Cual usará el navegador se indicará en el código HTML con el atributo METHOD.
Si usamos GET todos los datos se almacenarán en la variable de entorno QUERY_STRING, y el programa CGI debe leerlos de ahí. El problema es que esta variable suele tener una longitud limitada. En ocasiones esta limitación es de 256 caracteres, lo que limita su uso a formularios muy sencillos. Cabe decir que en los casos de la sección anterior en los que invocábamos a un CGI con la etiqueta A, estábamos usando este método.
Si usamos POST el CGI recibirá los datos por la entrada estándar, y por tanto no hay limitación en el tamaño de los mismos. Si es necesario conocer dicho tamaño para procesar los datos puede obtenerse leyendo la variable de entorno CONTENT_LENGTH. Éste es el método más seguro de usar y por tanto el más utilizado.
Variables de un CGI
Como hemos visto, es habitual que un CGI deje información en una variable de entorno. Existen una serie de variables extra donde se almacena información de gran utilidad, como la dirección IP del navegante, el navegador que usa, etc. Las más importantes están resumidas en la siguiente tabla:
| Variable |
Significado |
| SERVER_NAME |
Dirección IP del host donde está el CGI. |
| SERVER_SOFTWARE |
Tipo de servidor Web que se está usando. |
| GATEWAY_INTERFACE |
Versión del interfaz CGI. |
| SERVER_PROTOCOL |
Versión del protocolo HTTP. |
| SERVER_PORT |
El puerto TCP que se está usando. En la mayoría de servidores Web es el 80. |
| REQUEST_METHOD |
Método de envío de información: POST o GET. |
| HTTP_ACCEPT |
Lista de los tipos MIME (content-types) que acepta el navegador. |
| HTTP_USER_AGENT |
El navegador usado por el usuario. |
| HTTP_REFERER |
Dirección URL del documento HTML donde estaba el formulario. |
| PATH_INFO |
Información extra (visto antes) |
| PATH_TRANSLATED |
La variable PATH_INFO adaptada al sistema específico donde está el CGI. |
| SCRIPT_NAME |
Nombre del CGI. |
| QUERY_STRING |
Argumentos pasado al CGI. |
| REMOTE_HOST |
Nombre del ordenador que envió los datos. |
| REMOTE_ADDR |
Dirección IP de dicho ordenador. |
| REMOTE_USER |
Nombre del usuario. |
| REMOTE_IDENT |
Sirve para el método de identificación ident. |
| CONTENT_TYPE |
Tipo de información que llega por la entrada estándar. Por defecto será: x-www-form-urlencoded que es la codificación que hemos visto antes. |
| CONTENT_LENGTH |
Longitud de los datos que llegan por la entrada estándar cuando hemos usado POST. |