Hablando de CGI: La Interfaz Común de Pasarela

Antes de introducirnos de lleno a lo que es CGI, de qué se trata, debemos tener en claro dos conceptos:

  • Página estática: una página estática generalmente tendrá como formato HTML, y será aquella que al ser solicitada al servidor web, éste no hace más que entregarla tal y como está, sin modificarle nada. Hoy en día ya casi no se utilizan este tipo de páginas, pero en los comienzos de la W3 era lo único que existia.
  • Página dinámica: son armadas en el servidor web. Para ello se utilizan programas y lenguajes específicos, capaces de dar como resultado un HTML que luego se le entregará al cliente que la solicitó.

Con estos conceptos ya conocidos, veamos qué es CGI.

Como se dijo, cuando un servidor recibe una solicitud de una página dinámica, éste
le pasa la bola (con parámetros si así se requiere) a un programa externo. Dicho programa puede estar escrito en cualquier lenguaje (que el servidor soporte); normalmente son lenguajes interpretados (no es necesario compilaciones previas y son mucho más portables).

CGI define un estándar para transferir datos entre el navegador web y un programa externo. Volviendo al ejemplo de solicitud de una página web, CGI debe pasarle los datos al programa de algun modo; existen dos métodos: GET y POST, cada uno tiene sus características, pero aquí no hablaremos de ello. Una vez que pasó los parámetros, se procederá a la ejecución del script.

Como resultado de esta ejecución, se obtiene un objeto MIME, el cual define de que tipo de resultado estamos hablando (generalmente, documentos HTML). Éste objeto es capturado entonces por el servidor web (por la llamada salida estándar), y entregado al que realizó la solicitud.

Todas estas cosas suceden cada vez que uno de nosotros solicita una página web; nada complicado de entender.

Adentrándonos ahora un poco en el proceso de intercambio de información, veamos algunas de las variables de entornos que entran en juego:

  • REQUEST_METHOD: puede ser GET o POST.
  • QUERY_STRING: sólo tiene valores cuando se utiliza el método GET. Está compuesta por parejas como Variable1=Valor, concatenadas con &. Aquí, algunos caracteres (como acentos) son reemplazados por otros.
  • PATH_INFO: el nombre nos dice todo; es la dirección de la solicitud realizada por el cliente (URL).
  • SCRIPT_NAME: nombre del script invocado.
  • SERVER_PORT: puerto por donde se recibió la petición.
  • SERVER_PROTOCOL: nombre y versión del protocolo utilizado (ejemplo: HTTP/1.0 o 1.1).

Ya terminando, existen otras versiones por así llamarlas de CGI. Una de ellas es FastCGI, dónde se busca darle mayor velocidad a la ejecución de scripts creando un único proceso para múltiples peticiones y no uno por cada una como lo hace CGI. Otra, es SCGI, de la que no se mucho asique prefiero sólo nombrarla (si se quiere más información acerca de ésto, recomiendo leer aquí).