FastCGI es un protocolo para interconectar programas interactivos con un servidor web.
FastCGI es una variación de la ya conocida Common Gateway Interface (CGI o Interfaz Común de Entrada).
El principal objetivo de FastCGI es reducir la carga asociada con el hecho de interconectar el servidor web y los programas Common Gateway Interface, permitiéndole a un servidor atender más peticiones a la vez.
En resumen, la libertad de diseño de CGI a la velocidad de un módulo del servidor..
CGI es un protocolo para interconectar aplicaciones externas con servidores web. Las aplicaciones CGI corren en un proceso separado que es creado al inicio de cada petición y es finalizado cuando termina su trabajo. Este modelo de "un nuevo proceso por cada petición" hace que los programas CGI sean muy fáciles de implementar, pero limita la eficiencia y la escalabilidad. En altas cargas, la sobrecarga en el sistema operativo por la creación y destrucción de procesos se torna significativa y limita la escalabilidad. Además, el modelo de procesos CGI limita las técnicas de reutilización de recursos (como ser la reutilización de conexiones a base de datos, caché en memoria, etc).
Para encarar el problema de escalabilidad del CGI, Open Market desarrolló FastCGI y lo introdujo por primera vez en su producto de servicio web a mediados de los 90'. Open Market originalmente desarrolló FastCGI en parte como una respuesta competitiva contra la, en aquel entonces en proceso, API propietaria de Netscape's, la NSAPI que servía para desarrollar aplicaciones Web.
Aunque inicialmente desarrollada por Open Market, FastCGI fue implementada por otros fabricantes de servicios web. FastCGI, sin embargo, compitió contra otras técnicas que también intentaban aumentar la velocidad y simplificar las comunicaciones del lado del servidor, pero sin seguir el paradigma CGI. Módulos para Apache tales como mod perl y mod php aparecieron aproximadamente por la misma fecha y parecían ser mejores reemplazos para CGI, permitiendo una integración muy próxima con la base del servidor web.
En vez de crear procesos nuevos por cada petición, FastCGI puede usar un solo proceso persistente que maneja cualquier petición durante su período de vida. El hecho de procesar múltiples peticiones a la vez es logrado ya sea mediante la utilización de una sola conexión con un multiplexado interno (por ejemplo múltiples peticiones sobre una sola conexión) y/o utilizando múltiples conexiones. Varios de esos procesos pueden existir, y eso es algo que incrementa la escalabilidad y el rendimiento. FastCGI permite también a los programas hacer que el servidor web realice ciertas operaciones sencillas, como leer un archivo antes de que la petición sea procesada. Las variables de entorno y las peticiones de páginas son enviadas desde el servidor web hacia los procesos a través de una conexión TCP (para procesos remotos) o a través de zócalos de Unix (para procesos locales). Las respuestas son devueltas desde el proceso hacia el servidor web sobre la misma conexión. La conexión puede ser cerrada al final de una respuesta, pero el servidor web y el proceso se mantienen en ejecución.
Varios administradores y programadores de sitios web encontraron que la separación de las aplicaciones web con respecto al servidor web producto de FastCGI (y la simplicidad de SCGI) tenían muchas ventajas sobre los intérpretes incrustados (mod perl, mod php, etc). Esta separación permite a los procesos del servidor y de las aplicaciones ser reiniciados en forma independiente; una consideración importante a tomar en cuenta en sitios web muy ocupados. Esto también facilita la aplicación de políticas de seguridad por cada aplicación; cosa importante para los ISPs y para las compañías de alojamiento web.
FastCGI puede ser implementado en cualquier lenguaje que soporte zócalos (sockets). La API existe[8] para:
FastCGI permitió portabilidad a las aplicaciones web; en contraste, las aplicaciones que fueron desarrolladas para intérpretes embebidos (tales como mod python) están generalmente muy limitadas a la API de Apache. Frameworks recientes tales como Ruby on Rails, Kepler (etc...) permiten el uso de cualquiera de los intérpretes embebidos (mod ruby, mod perl, mod python o mod_lual, respectivamente), pero también FastCGI. Esta tendencia parece ser que va a continuar.