Common Gateway Interface
# Common Gateway Interface

In informatica Common Gateway Interface (sigla CGI, in italiano "interfaccia comune", nel senso di standard, "per gateway") è una tecnologia standard usata dai web server per interfacciarsi con applicazioni esterne generando contenuti web dinamici.

Ogni volta che un client richiede al web server un URL corrispondente a un documento in puro HTML, gli viene restituito un documento statico (come un file di testo); se l'URL corrisponde invece a un programma CGI, il server lo esegue in tempo reale, generando dinamicamente informazioni per l'utente.

## Descrizione

### Utilizzo

Il CGI è la prima forma di elaborazione lato server implementata: quando a un web server arriva la richiesta di un documento CGI (solitamente con estensione .cgi, .exe o .pl) il server esegue il programma richiesto e al termine invia al web browser l'output del programma. Il file CGI è un semplice programma già compilato (codice oggetto) e la risposta viene acquisita attraverso standard output. L'acquisizione dei parametri può avvenire attraverso variabili d'ambiente, passaggio di parametri sulla riga di comando o lo standard input a seconda della mole di dati e delle scelte del programmatore.

CGI è attualmente usato solo con il protocollo HTTP anche se in futuro potrebbe essere esteso ad altri protocolli. La directory predefinita degli script CGI è /cgi-bin/ su sistemi IIS, anche se a volte è preferibile modificarla, per evitare i frequenti attacchi dai bot sui file in quella cartella.

### Linguaggi

I linguaggi di programmazione usati sono generalmente C/C++ e Perl. Alcuni applicativi utilizzano la tecnologia FastCGI per introdurre nuovi linguaggi di scripting, interpretati e non compilati, come ad esempio PHP. L'altra possibilità è utilizzare librerie, ma variano in base al server web e al sistema operativo utilizzato, diminuendo così la portabilità del software.

## Storia

CGI venne implementato nel 1993 quando il World Wide Web era agli esordi, inizialmente per l'utilizzo con le mailing list. Gli autori dell'interfaccia e della RFC furono sviluppatori dell'Apache Software Foundation: David Robinson e Ken Coar.

La normativa di riferimento è la RFC3875.

