O que é CGI (Common Gateway Interface)?

745

CGI é uma interface de gateway comum. Como o nome diz, é uma interface de gateway "comum" para tudo. É tão trivial e ingênuo do nome. Sinto que entendi isso e senti isso toda vez que encontrei essa palavra. Mas, francamente, eu não fiz. Ainda estou confuso.

Sou programador PHP com experiência em desenvolvimento web.

solicitação do usuário (cliente) para a página ---> servidor da web (-> interpretador PHP incorporado) ----> Script do lado do servidor (PHP) ---> MySQL Server.

Agora diga que meu script PHP pode obter resultados do servidor MySQL e do servidor MATLAB e de algum outro servidor.

Então, agora o PHP Script é o CGI? Porque a sua interface para o servidor web e todos os outros servidores? Eu não sei. Às vezes eles chamam CGI, uma tecnologia e outras vezes chamam CGI de um programa ou outro servidor.

  • O que exatamente é CGI?

  • Qual é o problema /cgi-bin/*.cgi? O que há com isso? Não sei para que serve esse cgi-bindiretório no servidor. Não sei por que eles têm extensões * .cgi.

  • Por que Perl sempre atrapalha? CGI e Perl (idioma). Eu também não sei o que há com esses dois. Quase o tempo todo eu continuo ouvindo esses dois em combinação "CGI & Perl". Este livro é outro ótimo exemplo de programação CGI com Perl . Por que não "Programação CGI com PHP / JSP / ASP"? Eu nunca vi essas coisas.

  • A programação CGI em C me confunde bastante. " em c " ?? A sério?? Eu não sei o que dizer. Estou apenas confuso. " em c " ?? Isso muda tudo. O programa precisa ser compilado e executado. Isso muda completamente minha visão da programação na web. Quando eu compilar? Como o programa é executado (porque será um código de máquina, portanto, ele deve ser executado como um processo independente). Como ele se comunica com o servidor web? IPC? e interface com todos os servidores (no meu exemplo MATLAB e MySQL) usando programação de soquete? Estou perdido!!

  • As pessoas dizem que o CGI está obsoleto e não está mais em uso. É assim mesmo? Qual é a atualização mais recente?

Uma vez, encontrei uma situação em que tinha que dar acesso à solicitação HTTP PUT ao servidor da web (Apache HTTPD). É uma longa volta. Então, tanto quanto me lembro, foi o que fiz:

  1. Editei o arquivo de configuração do Apache HTTPD para dizer ao servidor da web para passar todas as solicitações HTTP PUT para alguns put.php(eu tive que escrever esse script PHP)

  2. Implemente o put.php para lidar com a solicitação (salve o arquivo no local mencionado)

As pessoas disseram que eu escrevi um script CGI. Sério, eu não tinha ideia do que eles estavam falando.

  • Eu realmente escrevi um script CGI?

Espero que você entenda qual é a minha confusão. (Porque eu mesmo não sei onde estou confuso). Peço a vocês que mantenham sua resposta o mais simples possível. Realmente não consigo entender nenhuma terminologia técnica sofisticada. Pelo menos não neste caso.

EDITAR:

Encontrei este incrível tutorial "A programação CGI é simples!" - Tutorial CGI , que explica os conceitos da maneira mais simples possível. Depois de ler este artigo, convém ler Introdução à programação CGI em C para complementar seu entendimento com exemplos de código reais. Também adicionei esses links a este tutorial no artigo da Wikipedia: http://en.wikipedia.org/wiki/Common_Gateway_Interface

garras
fonte
9
Eu já vi CGI escrito em Cobol. Sem brincadeira!
Luc M
@Luc M. Interessado. Qual CGI você quer dizer (considerando que existe um raycaster no LINQ ...)?
Joe
15
@claws: As pessoas, principalmente da velha escola, chamarão QUALQUER código, independentemente do método real de execução, executado através do servidor da Web de CGI. O que você realmente escreveu é um script PHP, que pode ou não ser executado através do protocolo CGI. Sua confusão parece ter origem no significado ambivalente de CGI, um protocolo para executar código e o código que está sendo executado por meio do protocolo (que mais tarde foi generalizado para significar qualquer código executado na Web)
Vinko Vrsalovic
1
Em meados dos anos 90, escrevi alguns scripts CGI no HyperCard
Neal Davis
@ Joe Eu nunca recebi a notificação e hoje, lendo novamente este post, vi sua pergunta. Do CGI foram escritos em OpenVMS como executáveis independentes (sem quadro envolvidos ou de terceiros applicaitons ...)
Luc M

Respostas:

427

CGI é uma interface que informa ao servidor da web como passar dados para e de um aplicativo. Mais especificamente, descreve como as informações da solicitação são transmitidas em variáveis ​​de ambiente (como tipo de solicitação, endereço IP remoto), como o corpo da solicitação é transmitido por entrada padrão e como a resposta é transmitida por saída padrão. Você pode consultar a especificação CGI para obter detalhes.

Para usar sua imagem:

user (client) request for page ---> webserver ---[CGI]----> Server side Program ---> MySQL Server.

A maioria, se não todos, os servidores da Web podem ser configurados para executar um programa como um 'CGI'. Isso significa que o servidor da web, ao receber uma solicitação, encaminhará os dados para um programa específico, configurando algumas variáveis ​​de ambiente e organizando os parâmetros por meio de entrada e saída padrão, para que o programa possa saber onde e o que procurar.

O principal benefício é que você pode executar QUALQUER código executável da Web, já que o servidor da Web e o programa sabem como o CGI funciona. É por isso que você pode escrever programas da Web em C ou Bash com um servidor da Web ativado por CGI comum. Isso e a maioria dos ambientes de programação podem facilmente usar entrada padrão, saída padrão e variáveis ​​de ambiente.

No seu caso, você provavelmente usou outro meio de comunicação específico para PHP entre seus scripts e o servidor da Web, como você mencionou na sua pergunta, é um intérprete incorporado chamado mod_php.

Então, respondendo suas perguntas:

O que exatamente é CGI?

Veja acima.

Qual é o problema do /cgi-bin/*.cgi? O que há com isso? Não sei para que serve esse diretório cgi-bin no servidor. Não sei por que eles têm extensões * .cgi.

Esse é o local tradicional dos programas cgi, muitos servidores da web vêm com esse diretório pré-configurado para executar todos os binários existentes como programas CGI. A extensão .cgi indica um executável que deve funcionar através do CGI.

Por que Perl sempre atrapalha? CGI e Perl (idioma). Eu também não sei o que há com esses dois. Quase o tempo todo eu continuo ouvindo esses dois em combinação "CGI & Perl". Este livro é outro ótimo exemplo de programação CGI com Perl Por que não "Programação CGI com PHP / JSP / ASP". Eu nunca vi essas coisas.

Como o Perl é antigo (mais antigo que PHP, JSP e ASP, que já existia quando o CGI já era antigo, o Perl existia quando o CGI era novo) e se tornou famoso por ser uma linguagem muito boa para servir páginas dinâmicas via CGI. Atualmente existem outras alternativas para rodar o Perl em um servidor web, principalmente o mod_perl .

A programação CGI em C me confunde bastante. em C ?? A sério?? Eu não sei o que dizer. Estou apenas confuso. "Em C"? Isso muda tudo. O programa precisa ser compilado e executado. Isso muda completamente minha visão da programação na Web. Quando eu compilar? Como o programa é executado (porque será um código da máquina, portanto, ele deve ser executado como um processo independente. Como ele se comunica com o servidor da Web? IPC? e faz interface com todos os servidores (no meu exemplo, MATLAB e MySQL) usando programação de soquete? Estou perdido!

Você compila o executável uma vez, o servidor da web executa o programa e passa os dados na solicitação para o programa e gera a resposta recebida. O CGI especifica que uma instância do programa será iniciada por cada solicitação. É por isso que o CGI é ineficiente e meio obsoleto hoje em dia.

Eles dizem que o CGI está obsoleto. Não está mais em uso. É assim? Qual é a sua atualização mais recente?

O CGI ainda é usado quando o desempenho não é primordial e é necessário um meio simples de executar o código. É ineficiente pelas razões declaradas anteriormente e existem meios mais modernos de executar qualquer programa em um ambiente da Web. Atualmente, o mais famoso é o FastCGI .

Vinko Vrsalovic
fonte
24
Mais especificamente, descreve como as informações de solicitação são transmitidas em variáveis ​​de ambiente (como tipo de solicitação, endereço IP remoto), como o corpo de requisição é transmitido por entrada padrão e como a resposta é transmitida por saída padrão. Você pode consultar a especificação CGI ( hoohoo.ncsa.illinois.edu/cgi ) para obter detalhes.
daf
3
Assumindo Server side Programna sua figura está o meu script PHP. Então, eu nunca fiz nenhuma programação CGI? Porque nunca escrevi nada entre o servidor da web e meu script PHP. Droga!! isso me mata.
garras
4
O PHP ainda é fortemente baseado no protocolo CGI, a maior parte do conteúdo de $ _SERVER é diretamente da especificação CGI. E "programação CGI" sempre significou o programa processando a solicitação, não a implementação do próprio protocolo. Se você explicasse o que faz com o PHP a um pioneiro da programação da era de 1993, ele consideraria uma forma avançada (embora possivelmente fraca) de programação CGI.
Michael Borgwardt
5
@ Michael: Mas quando rodar via mod_php não é CGI (mesmo que baseado nele). E eu concordo que CGI se refere ao protocolo e aos scripts executados por ele.
Vinko Vrsalovic
2
@Vinko Vrsalovic: se o CGI é uma interface para Perl, C ou outras linguagens executadas no servidor Web, que interface é usada pelo PHP para rodar no Apache ???????? e é PHP vem sob especificações CGI?
hardik 31/08
63

O que exatamente é CGI?

Um meio para um servidor Web obter seus dados de um programa (em vez de, por exemplo, um arquivo).

Qual é o problema do /cgi-bin/*.cgi?

Nada demais. É apenas uma convenção.

Não sei para que serve esse diretório cgi-bin no servidor. Não sei por que eles têm extensões * .cgi.

O servidor precisa saber o que fazer com o arquivo (por exemplo, trate-o como um programa para executar, em vez de algo para simplesmente servir). Ter uma extensão .html indica para usar um tipo de conteúdo de texto / html. Ter uma extensão .cgi diz para executá-lo como um programa.

Manter os executáveis ​​em um diretório separado oferece proteção adicional contra a execução de arquivos incorretos e / ou a exibição de programas CGI como dados brutos, caso o servidor seja configurado incorretamente.

Por que Perl sempre atrapalha?

Não faz. Perl era grande e popular ao mesmo tempo que o CGI.

Não uso Perl CGI há anos. Eu estava usando o mod_perl por um longo tempo, e tendem a PSGI / Plack com FastCGI atualmente.

Este livro é outro ótimo exemplo de programação CGI com Perl Por que não "Programação CGI com PHP / JSP / ASP".

O CGI não é muito eficiente. Melhores métodos para conversar com programas de servidores da web surgiram na mesma época do PHP. JSP e ASP são métodos diferentes para conversar com programas.

A programação CGI em C me confunde bastante. em C ?? A sério??

É uma linguagem de programação, por que não?

Quando eu compilar?

  1. Escreva código
  2. Compilar
  3. URL de acesso
  4. O servidor da Web executa o programa

Como o programa é executado (porque será um código de máquina, portanto, ele deve ser executado como um processo independente).

Ele não precisa ser executado como um processo independente (você pode escrever os módulos do Apache em C), mas todo o conceito de CGI é que ele lança um processo externo.

Como ele se comunica com o servidor web? IPC?

STDIN / STDOUT e variáveis ​​de ambiente - conforme definido na especificação CGI.

e interface com todos os servidores (no meu exemplo MATLAB e MySQL) usando programação de soquete?

Usando os métodos que você gosta e é suportado.

Eles dizem que o CGI é depreciado. Não está mais em uso. É assim?

O CGI é ineficiente, lento e simples. Raramente é usado, quando usado, é porque é simples. Se o desempenho não é grande coisa, a simplicidade vale muito.

Qual é a sua atualização mais recente?

1.1

Quentin
fonte
1. Escreva o código 2. Compile 3. URL de acesso 4. O servidor da Web executa o programa. || Mas como o servidor da web sabe onde você coloca o programa executável compilado? Como ele sabe qual programa executável (entre todos eles) a ser executado?
Pacerier
@Pacerier - Da mesma maneira que ele sabe qual arquivo estático enviar ao cliente se um arquivo estático for solicitado.
Quentin
41

CGI é uma especificação de interface entre um servidor web (servidor HTTP) e um programa executável de algum tipo que deve lidar com uma solicitação específica.

Ele descreve como determinadas propriedades dessa solicitação devem ser comunicadas ao ambiente desse programa e como o programa deve comunicar a resposta ao servidor e como o servidor deve "concluir" a resposta para formar uma resposta válida à solicitação HTTP original.

Durante algum tempo, o CGI foi um rascunho da IETF na Internet e, como tal, teve um prazo de validade. Ele expirou sem atualização, portanto não havia CGI 'padrão'. Agora é uma RFC informativa, mas, como tal, documenta a prática comum e não é um padrão em si. rfc3875.txt , rfc3875.html

Os programas que implementam uma interface CGI podem ser gravados em qualquer idioma executável na máquina de destino. Eles devem ser capazes de acessar variáveis ​​de ambiente e, geralmente , entrada padrão e geram sua saída na saída padrão .

Linguagens compiladas como C eram comumente usadas, assim como linguagens de script como perl, geralmente usando bibliotecas para facilitar o acesso ao ambiente CGI.

Uma das grandes desvantagens do CGI é que um novo programa é gerado para cada solicitação, portanto, manter o estado entre as solicitações pode ser um grande problema de desempenho. O estado pode ser manipulado em cookies ou codificado em um URL, mas, se for grande demais, deverá ser armazenado em outro local e codificado a partir de informações de URL codificadas ou de um cookie. Cada chamada CGI precisaria recarregar o estado armazenado de uma loja em algum lugar.

Por esse motivo, e por uma interface bastante simples para solicitações e sessões, os ambientes melhor integrados entre servidores e aplicativos da Web são muito mais populares. Ambientes como uma implementação moderna de php com apache integram muito melhor o idioma de destino com o servidor web e fornecem acesso a objetos de solicitação e sessão que são necessários para atender com eficiência solicitações HTTP. Eles oferecem uma maneira muito mais fácil e rica de escrever 'programas' para lidar com solicitações HTTP.

Se você escreveu um script CGI depende da interpretação. Certamente fez o trabalho de um, mas é muito mais comum rodar o php como um módulo em que a interface entre o script e o servidor não é estritamente uma interface CGI.

CB Bailey
fonte
1
Incomodar. Comecei a escrever isso quando não havia outras respostas, mas fui chamado. Agora é o número 8 da lista. Não tenho vontade de excluí-lo agora, voltarei e o excluirei mais tarde.
CB Bailey
6
Ei .. Por favor, não exclua. Diz algumas coisas de maneira mais clara. Achei útil. Pode ser que alguns outros também achem isso. :)
garras
1
OK, vou deixar por um tempo. Provavelmente seria bom se alguém integrasse passagens 'melhores' a uma das respostas mais completas. Então, podemos ter uma resposta mais definitiva.
CB Bailey
18

O CGI é especificado na RFC 3875 , embora essa seja uma codificação "oficial" posterior do documento original da NCSA . Basicamente, o CGI define um protocolo para passar dados sobre uma solicitação HTTP de um servidor da web para um programa para processar - qualquer programa, em qualquer idioma. No momento em que a especificação foi escrita (1993), a maioria dos servidores da Web continha apenas páginas estáticas; os "aplicativos da Web" eram algo raro e novo; portanto, parecia natural mantê-los separados do conteúdo estático "normal", como em um cgi-bindiretório além do conteúdo estático e terminá-lo .cgi.

No momento, também não havia "linguagens de programação da web" dedicadas, como PHP, e C era a linguagem de programação portátil dominante - muitas pessoas escreviam seus scripts CGI em C. Mas Perl rapidamente se mostrou melhor para esse tipo de e CGI se tornou quase sinônimo de Perl por um tempo. Depois vieram os Java Servlets, PHP e muitos outros, que assumiram grande parte da participação de mercado da Perl.

Michael Borgwardt
fonte
Por que o PHP é uma "linguagem de programação web dedicada"? PHP é uma linguagem de propósito genérico e as pessoas também a usam para aplicativos de interface do usuário.
Pacerier
@Pacerier: foi projetado para ser uma linguagem de programação para gerar páginas da web, e é para isso que 99,9% de seus usuários a utilizam. É mesmo em seu nome . Reivindicar qualquer outra coisa é apenas inútil. Se você o estiver usando para aplicativos de interface do usuário, computação científica ou programação incorporada, tudo bem, seja feliz, ninguém está dizendo que você não tem permissão.
Michael Borgwardt
13

Dê uma olhada no CGI na Wikipedia. CGI é um protocolo entre o servidor da web e um programa externo ou um script que manipula a entrada e gera a saída que é enviada ao navegador.

O CGI é simplesmente uma maneira de o servidor web e um programa se comunicar, nada mais, nada menos. Aqui, o servidor gerencia a conexão de rede e o protocolo HTTP e o programa manipula a entrada e gera a saída que é enviada ao navegador. O script CGI pode ser basicamente qualquer programa que possa ser executado pelo servidor da web e siga o protocolo CGI. Assim, um programa CGI pode ser implementado, por exemplo, em C. No entanto, isso é extremamente raro, pois C não é muito adequado para a tarefa.

/cgi-bin/*.cgié simplesmente um caminho em que as pessoas geralmente colocam seu script CGI. Normalmente, o servidor da Web é configurado por padrão para buscar scripts CGI desse caminho.

um script CGI também pode ser implementado em PHP, mas nem todos os programas PHP são scripts CGI. Se o servidor da Web tiver incorporado o interpretador PHP (por exemplo, mod_php no Apache), a fase CGI será ignorada por um protocolo direto mais eficiente entre o servidor da Web e o intérprete.

A implementação ou não de um script CGI depende de como o script está sendo executado pelo servidor da web.

Juha Syrjälä
fonte
12

O CGI basicamente transmite a solicitação para qualquer intérprete que esteja configurado com o servidor da Web - pode ser Perl, Python, PHP, Ruby, C praticamente qualquer coisa. Perl foi o mais comum nos dias de hoje, é por isso que você costuma vê-lo em referência ao CGI.

O CGI não está morto. De fato, a maioria das grandes empresas de hospedagem executa PHP como CGI, em vez de mod_php, porque oferece configuração no nível do usuário e outras coisas, enquanto é mais lento que o mod_php. Ruby e Python também são normalmente executados como CGI. A principal diferença aqui é que um módulo de servidor é executado como parte do software real do servidor - onde, como no CGI, está totalmente fora do servidor O servidor apenas usa o módulo CGI para determinar como passar e receber dados para o intérprete externo.

prodigitalson
fonte
2
Não diminuindo o voto, mas a maioria das instalações da web em python que eu já vi em mod_wsgi ou mod_python.
ChristopheD
É assim que a maioria das pessoas usa o termo script CGI, mas não é exatamente o que o termo significa.
reinierpost
Você diz intérprete, mas C raramente é interpretado e programas compilados, como os programas compilados C, podem ser usados ​​para CGI.
user34660
11

O CGI é um mecanismo pelo qual um programa externo é chamado pelo servidor da web para manipular uma solicitação, com variáveis ​​de ambiente e entrada padrão sendo usadas para alimentar os dados da solicitação ao programa. O idioma exato em que o programa externo está escrito não importa, embora seja mais fácil escrever programas CGI em alguns idiomas do que em outros.

Como os scripts CGI precisam de permissões de execução, o httpd, por padrão, apenas permite que programas CGI no cgi-bindiretório sejam executados para fins de segurança (possivelmente agora mal orientados).

A maioria dos scripts PHP é executada no processo do servidor web via mod_php. Isto não é CGI.

O CGI é lento, pois o programa (e o intérprete relacionado) deve ser iniciado por solicitação. Alternativas modernas são execução incorporada, usada pelo mod_php, e processos de execução longa, usados ​​pelo FastCGI. Uma determinada linguagem pode ter sua própria maneira de implementar esses mecanismos, portanto, pergunte antes de recorrer ao CGI.

Ignacio Vazquez-Abrams
fonte
@Ignacio Vazquez-Abrams: se a interface CGI criar um novo processo, cada vez que ele receber uma solicitação de recurso CGI do que a diferença de execução entre CGI e mod_php ??????? é CGI e mod_php são os mesmos ???? ou é possível escrever scripts PHP executados na interface CGI e não no mod_php ???
hardik 31/08
@Hardik: mod_php é executado como parte do HTTPd, que é responsável por seus próprios processos.
Ignacio Vazquez-Abrams
o que é esse 'programa externo'? é um intérprete se eu rodar php com php-fpm?
Slier
@ slier: É um programa arbitrário que não é o servidor web.
Ignacio Vazquez-Abrams
@ IgnacioVazquez-Abrams, então é seguro assumir que é um interpreterse estou executando php com php-fpm?
Slier
7

Talvez você queira saber o que não é CGI, e a resposta é um MÓDULO para o seu servidor da web (se eu suponho que você esteja executando o Apache). E É A GRANDE DIFERENÇA, porque as necessidades de CGI e um programa externo, thread, qualquer instancia para instanciar um servidor de aplicativos PERL, PHP, C, quando, quando você executa como um MÓDULO, esse programa é o servidor da Web (apache) per se.

Por tudo isso, existem muitos problemas de desempenho, segurança e portabilidade que entram em jogo. Mas é bom saber primeiro o que não é CGI, entender o que é.

denica
fonte
7

Um exemplo da vida real: um banco de dados complicado que precisa ser exibido em um site. Como o banco de dados foi projetado em algum momento por volta de 1986 (!), Muitos dados foram compactados de maneiras diferentes para economizar espaço em disco.

À medida que o desenvolvimento prosseguia, os desenvolvedores não podiam mais resolver solicitações de dados complicadas apenas no SQL, por exemplo, porque os algoritmos de classificação eram incomuns.

Existem três soluções sensatas:

  1. rápido e sujo: envie os dados não gravados para o PHP, classifique-os lá. Obviamente, uma solução muito cara, porque isso seria repetido toda vez que a página é chamada
  2. escreva um plug-in no mecanismo de banco de dados - mas o administrador não estava pronto para permitir a execução de código estrangeiro no servidor ou
  3. você pode processar os dados em um programa (C, Perl, etc.) e gerar HTML. O próprio programa entra no / cgi-bin e é chamado pelo servidor da web (por exemplo, Apache) diretamente, não através do PHP.

O CGI executa seu script na Solução # 3 e gera o efeito no navegador. Você tem a velocidade do programa compilado, a flexibilidade de uma linguagem melhor que o SQL e não precisa gravar plug-ins no servidor SQL. (Novamente, este é um exemplo específico para SQL e C)

Michał Leon
fonte
1
A melhor resposta para mim, eu entendi.
Daniel Daniel #
7

Um script CGI é um programa de console / shell. No Windows, quando você usa uma janela "Prompt de Comando", executa programas de console. Quando um servidor da web executa um script CGI, ele fornece entrada para o programa console / shell usando variáveis ​​de ambiente ou "entrada padrão". A entrada padrão é como digitar dados em um programa console / shell; no caso de um script CGI, o servidor da web digita. O script CGI grava os dados na "saída padrão" e essa saída é enviada ao cliente (o navegador da web) como uma página HTML. A saída padrão é como a saída que você vê em um programa console / shell, exceto pelo servidor da web que a lê e a envia.

Um script CGI pode ser executado a partir de um navegador. O URI normalmente inclui uma sequência de consultas que é fornecida ao script CGI. Se o método for "get", a sequência de consultas será fornecida ao script CGI em uma variável de ambiente chamada QUERY_STRING. Se o método for "post", a string de consulta será fornecida ao script CGI usando a entrada padrão (o script CGI lê a string de consulta da entrada padrão).

Um uso precoce de scripts CGI era processar formulários. No início do HTML, os formulários HTML geralmente tinham um atributo "action" e um botão designado como o botão "submit". Quando o botão enviar é pressionado, o URI especificado no atributo "ação" será enviado ao servidor com os dados do formulário enviados como uma sequência de consultas. Se a "ação" especificar um script CGI, o script CGI será executado e, em seguida, produzirá uma página HTML.

RFC 3875 "A interface comum de gateway (CGI)" define parcialmente o CGI usando C, como dizendo que as variáveis ​​de ambiente "são acessadas pela rotina da biblioteca C, getenv () ou pela variável environment".

Se você estiver desenvolvendo um script CGI usando C / C ++ e usar o Microsoft Visual Studio para fazer isso, desenvolverá um programa de console.

user34660
fonte
Um "script CGI" é um termo amplo e também pode incluir executáveis.
71GA 15/01
6

Um CGI é um programa (ou uma API da Web) que você escreve e salva no site do servidor. CGI é um arquivo.

Este arquivo fica e aguarda no servidor Web. Quando o navegador do cliente envia uma solicitação ao servidor Web para executar seu arquivo CGI, o servidor Web executa seu arquivo CGI no site do servidor. As entradas para este programa CGI, se houver, são do navegador do cliente. As saídas deste programa CGI são enviadas para o navegador.

Qual idioma você usa para escrever um programa CGI? Outras postagens já mencionam c, java, php, perl, etc.

Loc Pham
fonte
4

A idéia por trás do CGI é que um programa / script (seja Perl ou mesmo C) receba entrada via STDIN(os dados da solicitação) e emita dados via STDOUT(eco, printfinstruções).

A razão pela qual a maioria dos scripts PHP não se qualifica é que eles são executados no módulo PHP Apache.

Nathan Osman
fonte