O que é a interface comum de gateway (CGI)?

A Common Gateway Interface (CGI) é um padrão que define como os programas externos podem fornecer informações aos servidores da web. CGI fornece um mecanismo para servidores da web como o Apache para trocar dados com linguagens de programação como Perl.
CGI é um dos componentes mais antigos da infraestrutura da Internet. Ele ainda é amplamente usado hoje, apesar de ter sido substituído por alternativas mais novas.
O software de servidor da web era tradicionalmente limitado a veicular páginas da web estáticas. Os scripts CGI possibilitaram a produção de respostas dinâmicas, criadas quando uma solicitação é recebida.
Padronizando servidores HTTP
CGI foi projetado para fornecer uma maneira padronizada para as linguagens de programação acessarem as informações do servidor HTTP. Qualquer servidor HTTP pode ser emparelhado com qualquer linguagem de programação, desde que ambos sigam as especificações CGI.
Os servidores habilitados para CGI lidarão com as solicitações usando um processo semelhante ao seguinte:
- Uma nova solicitação é recebida: /example. pl.
- O servidor da web reconhece example. pl como um script CGI executável, então ele invoca o script.
- O script Perl CGI recebe todos os dados sobre a solicitação, como seu URL e cabeçalhos HTTP.
- O script example. pl é executado; sua saída será devolvida ao servidor da web para emissão como uma resposta HTTP.
O fluxo descrito acima contrasta totalmente com a operação normal de um servidor da web. Uma solicitação básica para /example. pl retornaria o conteúdo desse arquivo. Se o arquivo não existisse, você receberia uma resposta 404.
Ao usar CGI, uma solicitação não precisa ser mapeada para um arquivo real no disco. Em vez disso, um programa definido pelo usuário é executado. O programa é responsável por gerar a saída a ser enviada ao cliente. O servidor da web não está mais preocupado com o conteúdo real da resposta.
Informações trocadas via CGI
O binário do programa executado via CGI pode acessar vários dados sobre a solicitação HTTP de entrada. Isso inclui o URL, cabeçalhos, string de consulta e método HTTP, bem como o endereço IP do cliente remoto.
O software do servidor não é necessário para fornecer todos os dados literalmente. A especificação CGI permite que os servidores excluam cabeçalhos das variáveis de ambiente. Isso pode ser feito para omitir informações confidenciais – como o valor do cabeçalho de autorização – ou para evitar redundância quando a mesma informação puder ser acessada usando uma variável dedicada.
Além dos dados sobre a solicitação, os servidores compatíveis com CGI também devem indicar vários detalhes sobre si mesmos. Isso inclui o nome e a versão do software do servidor host. Os scripts podem usar esses detalhes como acharem adequado.
As informações são passadas do servidor para o programa CGI como variáveis de ambiente. O programa os acessa da mesma forma que qualquer outra variável de ambiente. O servidor executará o programa como um processo filho de si mesmo, definindo as variáveis de ambiente antes de chamar o executável.
Há um dado que não será passado como uma variável de ambiente. O corpo da solicitação recebe tratamento especial, pois pode ser extremamente longo. Isso será canalizado para o script em seu fluxo de entrada padrão. Os scripts são informados sobre a quantidade de dados disponíveis por meio da variável de ambiente CONTENT_LENGTH.
Assim que o processamento do script for concluído, o script CGI retornará uma resposta HTTP ao servidor. Deve ser uma resposta HTTP completa, incluindo cabeçalhos e um corpo opcional. O script emite a resposta para seu fluxo de saída padrão. O servidor então envia a resposta de volta ao cliente pela conexão HTTP.
Onde está o CGI hoje?
CGI ajudou a criar a web moderna. Ele forneceu uma maneira extremamente simples de criar scripts dinâmicos do lado do servidor usando as tecnologias de meados dos anos 90. Uma página da web não era mais um arquivo HTML estático.
A simplicidade do CGI o ajudou a perdurar nas décadas seguintes. Os scripts CGI permanecem em uso, principalmente em aplicativos legados baseados em linguagens mais antigas. A tecnologia não parou; CGI foi substituído por alternativas mais modernas que são mais adequadas à web de hoje.
O CGI tradicional cria uma sobrecarga que se torna problemática em escala. O script CGI é recarregado a cada solicitação, gerando um novo processo que pode exaurir recursos em sites de alto tráfego.
CGI &’ também é limitado em termos de controle que fornece aos scripts. Os scripts só podem determinar o conteúdo da resposta enviado de volta ao cliente. Eles são incapazes de influenciar qualquer outra parte da troca HTTP, como autenticação ou gerenciamento de sessão.
Finalmente, existem questões de segurança. Os scripts CGI geralmente são executados como um processo filho do servidor. Isso significa que o servidor deve ser protegido contra interferência de script. A configuração incorreta pode dar a um script acesso indesejável a outros recursos gerenciados pelo servidor, como sua configuração e arquivos de log.
Muitos dos problemas do CGI &’ s foram resolvidos por tecnologias de interface mais recentes. FastCGI foi criado para reduzir o problema de sobrecarga de CGI. Ele funciona de forma semelhante ao CGI, mas não gera um novo processo para cada solicitação. Em vez disso, o servidor FastCGI funciona independentemente do servidor da web, mantendo seu próprio conjunto de processos persistentes usados para hospedar os scripts CGI.
Em outros lugares, as linguagens de programação individuais implementaram suas próprias interfaces de servidor. Eles são integrados diretamente aos servidores da web, geralmente por meio de módulos opcionais. Um exemplo são os mod_php e mod_perl do Apache, que oferecem suporte nativo para essas linguagens de programação sem usar CGI (embora ambos possam ser usados via CGI).
Apesar do surgimento desses mecanismos, CGI continua relevante. A simplicidade no centro de seu design informou a maioria dos esforços subsequentes para melhorar a arquitetura geral. Embora seja improvável que você encontre CGI no dia-a-dia em sistemas da web modernos, os principais servidores da web continuam a suportá-lo e parece improvável que mude tão cedo.
Nenhum comentário