FastCGI - FastCGI

FastCGI è un protocollo binario per interfacciare programmi interattivi con un web server . È una variazione della precedente Common Gateway Interface (CGI). L'obiettivo principale di FastCGI è ridurre l'overhead relativo all'interfacciamento tra server web e programmi CGI, consentendo a un server di gestire più richieste di pagine web per unità di tempo.

Storia

Common Gateway Interface (CGI) è un protocollo per interfacciare applicazioni esterne a server web. Le applicazioni CGI vengono eseguite in processi separati , che vengono creati all'inizio di ogni richiesta e smontati alla fine. Questo modello "un nuovo processo per richiesta" rende i programmi CGI molto semplici da implementare, ma limita l'efficienza e la scalabilità. A carichi elevati, l' overhead del sistema operativo per la creazione e la distruzione dei processi diventa significativo. Inoltre, il modello di processo CGI limita i metodi di riutilizzo delle risorse, come il riutilizzo delle connessioni al database, la memorizzazione nella cache in memoria, ecc.

Per affrontare le carenze di scalabilità della CGI, Open Market ha sviluppato FastCGI e lo ha introdotto per la prima volta nel proprio prodotto server web a metà degli anni '90. Open Market originariamente sviluppato FastCGI in parte come risposta competitiva per Netscape s' proprietaria, in-process application programming interface (API) ( Netscape Server Application Programming Interface (NSAPI)) per lo sviluppo di applicazioni Web.

Sebbene sia stato sviluppato prima da Open Market, FastCGI è stato poi implementato da molti altri produttori di server web. Tuttavia, il suo approccio era in competizione con altri metodi per velocizzare e semplificare la comunicazione server-sottoprogramma. I moduli Apache HTTP Server come mod_perl e mod_php sono apparsi nello stesso periodo e hanno guadagnato rapidamente popolarità. A partire dal 2020, tutti questi vari metodi, inclusa la CGI, rimangono di uso comune.

Dettagli di implementazione

Invece di creare un nuovo processo per ogni richiesta, FastCGI utilizza processi persistenti per gestire una serie di richieste. Questi processi sono di proprietà del server FastCGI, non del server web.

Per soddisfare una richiesta in entrata, il server Web invia le informazioni sulle variabili di ambiente e la richiesta di pagina a un processo FastCGI tramite un socket di dominio Unix , una named pipe o una connessione TCP ( Transmission Control Protocol ). Le risposte vengono restituite dal processo al server Web tramite la stessa connessione e il server Web fornisce quindi tale risposta all'utente finale . La connessione può essere chiusa alla fine di una risposta, ma i processi del server Web e del servizio FastCGI persistono.

Ogni singolo processo FastCGI può gestire molte richieste nel corso della sua vita, evitando così il sovraccarico della creazione e del termine del processo per richiesta. L'elaborazione di più richieste contemporaneamente può essere eseguita in diversi modi: utilizzando una connessione con multiplexing interno (ovvero, più richieste su una connessione); utilizzando più connessioni; o da un mix di questi metodi. È possibile configurare più server FastCGI, aumentando stabilità e scalabilità.

Gli amministratori ei programmatori di siti Web possono scoprire che separare le applicazioni Web dal server Web in FastCGI presenta molti vantaggi rispetto agli interpreti incorporati ( mod_perl , mod_php , ecc.). Questa separazione consente di riavviare i processi del server e dell'applicazione in modo indipendente, una considerazione importante per i siti Web occupati. Consente inoltre l'implementazione di policy di sicurezza del servizio di hosting per applicazione, che è un requisito importante per gli ISP e le società di web hosting. Diversi tipi di richieste in entrata possono essere distribuiti a server FastCGI specifici che sono stati attrezzati per gestire questi tipi di richieste in modo efficiente.

Server Web che implementano FastCGI

Nota: se non diversamente specificato, la completezza dell'implementazione FastCGI è sconosciuta

Associazioni di lingua per la sua API

FastCGI può essere implementato in qualsiasi linguaggio che supporti i socket di rete . Poiché "FastCGI è un protocollo, non un'implementazione", non è strettamente legato a nessuna lingua. Le interfacce di programmazione delle applicazioni (API) esistono per:

Framework recenti come Ruby on Rails , Catalyst , Django , Kepler e Plack consentono l'uso con gli interpreti incorporati ( mod_ruby , mod_perl , mod_python o mod_lua, per esempio) o FastCGI.

Riferimenti

link esterno