O termo CGI (sigla da expressão inglesa Common Gateway Interface) designa um método utilizado na execução de programas (scripts) para a geração instantânea de texto ou outros dados no servidor Web.
O CGI é um conjunto de regras para a execução de scripts e programas num servidor Web. Ele especifica a informação que é transmitida entre o servidor Web e os navegadores da internet dos clientes e como a informação é transmitida.
A maioria dos servidores da internet incluem um diretório cgi-bin na raiz da pasta de cada site no servidor. Quaisquer scripts colocados nesse diretório devem seguir as regras do Common Gateway Interface. Por exemplo, os scripts localizados no diretório cgi-bin podem ser dadas permissões executáveis, enquanto os ficheiros fora do diretório não podem ser autorizados a serem executados. Um script CGI também pode solicitar variáveis de ambiente CGI, tais como SERVER_PROTOCOL e REMOTE_HOST, que podem ser usadas como variáveis de entrada para o script.
Como o CGI é um interface padrão, ele pode ser usado em vários tipos de plataformas de hardware e é suportado por vários tipos de software de servidor de internet, tais como, o Apache e o Windows Server. Os scripts e programas CGI também podem ser escritos em várias linguagens diferentes, tais como o C ++, Java e Perl. Embora muitos sites continuem a usar o CGI para a execução de programas e scripts, os programadores, agora, frequentemente incluem scripts diretamente dentro de páginas da internet. Esses scripts, que são escritos em linguagens como PHP e ASP, são processados no servidor antes que a página seja carregada, e os dados resultantes são enviados para o navegador do utilizador.
A principal desvantagem do CGI é que cada carregamento de página incorre numa sobrecarga por ter que carregar os programas na memória. Os dados não podem ser facilmente armazenados em cache na memória entre as páginas que são carregadas. No entanto, há uma enorme quantidade de código base existente, principalmente na linguagem de programação Perl. Os defensores do CGI argumentam que é simples, estável, e uma boa escolha para certas aplicações, especialmente envolvendo tarefas onde o Perl destaca-se, tal como a manipulação de texto. As soluções alternativas também evitam o carregamento no Perl ou no PHP para cada solicitação, incluindo o tempo de execução no servidor da internet (mod_perl e mod_php na Apache), ou outras soluções, como FastCGI (processos separados que lidam com várias solicitações).