CGI
Se ha introducido la especificación CGI (Common Gateway Interface) para habilitar y estandarizar la interfaz entre servidores web y programas externos. El CGI es una interfaz relativamente simple, independiente de la plataforma y del lenguaje, estándar de la industria para el desarrollo de aplicaciones Web. Los programas que implementan el estándar CGI se denominan comúnmente programas CGI.
El propósito de CGI es ampliar la capacidad de un servidor HTTP proporcionando un marco en el que un servidor HTTP pueda interactuar con un programa especificado en URL. El formato de URL permite pasar parámetros al programa CGI. En el lado del servidor, la interfaz describe cómo se inicia el programa en el servidor HTTP y cómo se pasan los parámetros del programa mediante una combinación de variables de entrada estándar y de entorno. También describe cómo se devuelve la información de salida (como elementos HTML) al servidor HTTP utilizando la salida estándar. Por lo tanto, en su forma más simple, un programa CGI puede ser definido como un programa que:
- Puede invocarse como programa ejecutable y ejecutarse como proceso hijo del servidor HTTP.
- Es capaz de leer de la entrada estándar.
- Puede acceder a las variables de entorno.
- Es capaz de escribir en la salida estándar.
- Puede acceder a los argumentos de línea de mandatos pasados al programa.
El administrador controla qué programas CGI puede ejecutar el sistema utilizando las directivas de servidor. El servidor reconoce un URL que contiene una petición para un programa CGI, comúnmente llamado script CGI. (A lo largo de la documentación, utilizamos los términos programa CGI y script CGI para significar lo mismo.) En función de las directivas de servidor, el servidor llama a ese programa en nombre del cliente.
El servidor admite programas CGI escritos en C++, REXX, ILE C, ILE RPG e ILE COBOL. También da soporte a varios programas CGI con capacidad de hebra en todos los idiomas que dan soporte a varias hebras.
Los programas CGI que se crean compilando código fuente normalmente se ejecutan más rápido que los programas escritos en lenguajes interpretados como Net.Data® y lenguajes de script PHP. Sin embargo, los programas escritos en lenguajes de script tienden a ser más fáciles de escribir, mantener y depurar.
El soporte para CGI de IBM HTTP Server for i incluye soporte para IBM i-características únicas que mejoran el modelo de programación CGI en las áreas de rendimiento, alta disponibilidad y soporte para transacciones. En las secciones siguientes se describen las distintas características.
Procesos CGI de HTTP Server
Una preocupación importante con el rendimiento de CGI en otras plataformas es el hecho de que un programa CGI se inicia en cada petición de cliente Web. Esto incluye actividad adicional de disco y sistema operativo para crear el nuevo proceso (trabajo). Muy a menudo, la inicialización del programa CGI, como la conexión a un sistema de gestión de bases de datos, también tarda algún tiempo que se suma al tiempo de respuesta que los usuarios experimentan con dichas aplicaciones.
El IBM HTTP Server for i adopta un enfoque diferente. HTTP Server mantiene un grupo de procesos hijo del servidor HTTP que se utiliza para ejecutar programas CGI. Los procesos hijo no finalizan después de que se ejecute un programa CGI dentro del proceso. Además, los procesos hijo se asocian con un perfil de usuario y sólo se ejecutarán en el proceso las solicitudes de programas CGI que se ejecuten bajo el mismo perfil de usuario asociado con un proceso hijo existente.
Algunas de las características adicionales relacionadas con los procesos CGI incluyen:
- La capacidad de especificar cuántos procesos hijo, y bajo qué perfil de usuario, deben preiniciarse cuando se inicia el servidor web para que los clientes web no incurran en el acierto de rendimiento de iniciar un nuevo proceso hijo CGI.
- La capacidad de ejecutar una solicitud CGI en un proceso CGI preiniciado, permitiendo que el programa CGI se cargue e inicialice durante el inicio del servidor. Este soporte es beneficioso para los programas que se ejecutan en grupos de activación con nombre. Un programa CGI que se ejecuta en un grupo de activación con nombre se carga e inicializa una vez dentro de un proceso CGI.
Programas CGI persistentes
CGI persistente es una extensión de la interfaz CGI que permite a un programa CGI mantener una sesión con un cliente de navegador en varias solicitudes de navegador. Esto permite que los archivos se dejen abiertos, que se mantenga el estado y que las transacciones de base de datos de larga ejecución se confirmen o retrotraiga en función de las acciones del usuario final.
Programas CGI de alta disponibilidad
Los programas CGI de alta disponibilidad utilizan las API para conservar la información de estado. Se puede acceder a la información de estado mediante distintos servidores IBM i que participan como nodos de clúster en un entorno en clúster, incluso después de una anomalía o una conmutación del servidor HTTP Server o IBM i .
Ejecución de programas AIX CGI
El IBM HTTP Server for i puede ejecutar programas AIX® CGI ejecutando el programa CGI en el IBM Portable Application Solutions Environment para i.
Además de ejecutar programas AIX CGI, el IBM HTTP Server for i puede ejecutar programas AIX que implementen el protocolo FastCGI. FastCGI es una interfaz entre servidores Web y aplicaciones que combina algunas de las características de rendimiento de los módulos nativos de servidor Web con la independencia del servidor Web de la interfaz de programación CGI. Al igual que los programas AIX CGI, las aplicaciones AIX FastCGI se ejecutan en el entorno PASE para i.