O termo CGI vem de Common Gateway Interface. É apenas uma outra designação para o que conhecemos como API (Application Programming Interface). Resumo da história, a CGI é apenas uma API para o servidor web.
O servidor web, por sua vez, é o software que envia páginas web para os web browsers (navegadores como o Internet Explorer ou o Netscape). Tecnicamente, os navegadores deveriam ser chamados de clientes web e, as pessoas que os utilizam, deveriam ser chamados de navegadores. Mas deixa pra lá.
Encontra-se muita informação a respeito da CGI na Internet porém, na maioria das vezes, desencontrada e cheia de mitos e preconceitos. Vamos esclarecer algumas dúvidas relatando o que não é a CGI.
A CGI
...não é uma linguagem de programação: isto significa que você pode usar qualquer linguagem da sua escolha para escrever um programa CGI. É claro que a linguagem escolhida precisa ser capaz de ler um "input" e escrever um "output". Você conhece alguma linguagem de programação que não ofereça tais possibilidades?
...não necessita da linguagem Perl. A Perl pode ser usada assim como qualquer outra linguagem, como PHP, C, Phyton, Object Pascal, etc.
... não é apenas para especialistas em sistemas Unix. Aliás, não há necessidade de ser especialista algum, noções básicas de programação são mais do que suficientes.
...não é um estilo de programação. Use seu estilo próprio, pois apenas com "input" e "output" podemos fazer com que o servidor web "converse" com a CGI.
O que faz um Servidor Web?
Parece brincadeira, mas um servidor web apenas espera - a não ser que o site esteja sendo maciçamente acessado.
O que o servidor web fica esperando nada mais é do que um cliente, um navegador que solicite um arquivo. Este arquivo pode ser uma página HTML, um gráfico ou qualquer outro tipo de arquivo.
Quando o servidor web recebe uma solicitação, realiza três tarefas na seguinte ordem:
. Envia uma linha de texto raso que contém a indicação do tipo de arquivo que será enviado, ou seja, HTML, GIF, JPEG ou qualquer outro;
. Envia uma linha em branco;
. Envia o conteúdo do arquivo.
Como o Servidor Web envia arquivos?
Um de cada vez. Por incrível que pareça, apenas um.
Sabemos que uma página de web típica é constituída por um documento HTML e por alguns gráficos. Cada um deles é um arquivo diferente que precisa ser enviado ao navegador.
Como o servidor web envia apenas UM arquivo por vez, o navegador precisa iniciar uma nova sessão (solicitação) para cada um dos arquivos de que necessite. Ainda bem que, tanto o servidor web quanto o navegador, são multi-tarefa. O navegador pode solicitar vários arquivos simultaneamente e o servidor web pode enviar vários arquivos simultaneamente, porém, para cada um dos arquivos solicitados-enviados é necessária uma sessão própria.
O servidor web só é capaz de enviar arquivos?
Não necessariamente. Na verdade, o que ocorre é apenas uma transferência de dados. Lembre-se de que o servidor e o cliente (o navegador) geralmente são executados em computadores diferentes. Eles podem até usar sistemas operacionais diferentes em máquinas com microprocessadores diferentes. O navegador apenas solicita um "recurso" e não sabe, nem precisa saber, de onde o servidor obtém os dados.
Entretanto, um servidor típico está programado para obter seus dados de um arquivo. Ele simplesmente lê os dados do arquivo e os transmite para o cliente. Como resultado desse processo, o servidor envia apenas dados estáticos, ou seja, o servidor não altera dinamicamente os dados enviados.
O que fazer para enviar dados dinâmicos?
Não é nada difícil. A CGI foi projetada justamente para cumprir esta função. Você simplesmente escreve um programa que produz dados dinamicamente e estes dados, ao invés de um arquivo, são enviados para o navegador.
Esta é a maneira como um programa CGI amplia a funcionalidade de um servidor, da mesma forma que, por exemplo, uma DLL amplia a funcionalidade do Windows. Mas tem uma grande diferença: a CGI é muitíssimo mais simples de escrever do que qualquer coisa para o Windows.
Mas, como falar com o navegador?
Não há necessidade de se falar com o navegador. É o servidor que faz este trabalho. O melhor da brincadeira é que você nem mesmo precisa falar com o servidor. Tudo o que você tem a fazer é escrever para uma saída padrão (standart output). Da mesma forma como, por exemplo, você usa o printf() da linguagem C.
A única coisa que não se pode perder de vista é a sequência das três tarefas realizadas pelo servidor numa transmissão de dados (citada acima). Uma vez que o servidor desconhece o tipo de dados que você estará enviando, você precisa suprir a saída padrão com esta informação.
Foi dito acima que você pode usar seu estilo próprio. Pois vamos lá: suponha que seu servidor esteja rodando sob DOS. A bem da verdade, não existe nenhum servidor assim mas... existem servidores Windows e o Windows pode interpretar comandos do MS DOS. Sendo assim, imagine que você queira enviar uma lista do seu diretório corrente para a web (não é uma boa idéia, mas mostra como essa tarefa é simples). O MS DOS também tem o comando dir que envia a listagem de diretórios para a saída padrão. Então, teoricamente, poderíamos produzir o seguinte script:
1. Tarefa: identificar o tipo de dados que serão enviados:
2. Tarefa: enviar uma linha em branco:
3. Tarefa: enviar o conteúdo:
O exemplo acima é apenas uma simulação de como funciona um script CGI usando elementos que a maioria das pessoas conhece. Foi citado apenas para entender o princípio de um output (saída) e não para funcionar de verdade. Agora, mais um passo...
Como conseguir um input (uma entrada)?
Primeiramente precisa ficar bem claro que a web não é interativa. Isto significa que seu programa CGI não pode solicitar entradas (input) dos usuários, processá-las, enviar algum resultado (output), pedir mais um input etc.
É justamente por isso que a programação de uma CGI é muito simples. O programa recebe entradas do usuário apenas uma vez, logo no início, e envia apenas uma resposta (output). Entretanto, tanto a entrada quanto a resposta podem ter qualquer tamanho e complexidade, dependendo do que seu programa possa comportar.
Dito isto, você precisa saber que seu programa pode receber uma entrada do usuário de duas maneiras, dependendo do método que o navegador usar para enviá-lo ao servidor.
Onde o navegador acha o input do usuário?
O navegador aceita entradas usando formulários HTML (forms). Um formulário pode instruir o navegador para enviar dados através de dois métodos: GET e POST.
O método GET envia as entradas como parte da URL. O método POST envia as entradas como stdin. O segundo método parece ter algumas vantagens:
. É possível enviar maior quantidade de dados (a URL tem limite de tamanho);
. Os dados não são registrados em arquivos de acesso (log). Por exemplo: enviando uma senha como parte de uma URL deixa um rastro nos vários sistemas pelos quais os dados estejam passando!;
. Os dados não aparecem no campo de endereços do navegador. Novamente, mostrar uma senha no navegador pode não ser do agrado do usuário.
Como saber qual método está sendo usado?
O servidor web, antes de carregar seu programa CGI, inicializa algumas variáveis de contexto. Você pode analisar estas variáveis para saber a quantidade e a origem dos dados de entrada (input).
Uma das variáveis de contexto é a REQUEST_METHOD. Seu valor pode ser POST, GET e, eventualmente, HEAD.
Se REQUEST_METHOD indicar POST, a variável CONTENT_LENGTH indicará quantos bytes de dados deverão ser lidos através de stdin e a variável CONTENT_TYPE indicará que os dados se originam de um formulário (ou, possivelmente, de alguma outra fonte).
Assim que os dados tenham sido recebidos (lidos pelo servidor), podem imediatamente serem processados e a resposta (output) pode ser enviada através de um stdout. Geralmente a resposta é escrita na forma de dados HTML, com toda a formatação necessária. Mas programas CGI podem produzir qualquer tipo de resposta, como um arquivo GIF ou qualquer outra coisa.
Este é o motivo pelo qual você precisa indicar ao navegador, nas 2 primeiras etapas da transmissão, o tipo de dado que será enviado. Podemos identificar dados de HTML enviando a string Content-type: text/html (tarefa 1) seguida de uma string vazia (tarefa 2). Usando a linguagem C seria printf("Content-type: text/html\n\n"); onde \n é quebra de linha e o segundo \n outra quebra de linha para indicar a linha vazia. Usando Perl seria print "Content-type: text/html\n\n";
Ao contratar um dos nossos hospedagem de sites, revenda de hospedagem ou hospedagem streaming a sua conta terá ativação imediata, isto mesmo, ativaremos a sua conta antes mesmo do seu pagamento. O nosso painel de controle cPanel para hospedagem de sites e revenda de hospedagem, e o nosso painel de controle de hospedagem streaming são os melhores e os mais apropriados, intuitivos e de fácil utilização. Oferecemos aos nossos clientes suporte técnico 24 horas por dia e somos o único provedor de hospedagem que garante resposta quase que imediata aos tickets enviados. Queremos o sucesso dos seus negócios e estamos aqui para ajudá-lo de forma rápida, no momento que você precisar.
Trabalhamos somente com servidores ultra rápidos e fazemos parte de uma minoria no mercado que investe pesado nisso. Você pode usar tudo que estamos te oferecendo, sem medo, sem decepções. O melhor suporte técnico. 24 horas por dia. 7 dias por semana. 365 dias por ano. Levamos isto MUITO a sério. Nossos clientes podem atestar isso, porque simplesmente oferecemos o melhor serviço de hospedagem de sites de sites de todo o Brasil com o melhor custo benefício, além de nunca excedermos os nossos servidores.
Na FRHOST você ainda pode contar com o melhor serviço de hospedagem streaming para montar sua própria Webrádio, criando sua programação sem grandes conhecimentos em sistemas de transmissão através do nosso painel de controle de fácil utilização, tudo isto através do Streaming AAC Plus + MP3 da FRHOST.
Conte ainda com Servidores Dedicados, Servidores VPS, a melhor Revenda de Hospedagem de sites do Brasil, além de Certificado SSL Grátis para maior proteção da sua aplicação e website, isto mesmo hospedagem com SSL Grátis.
Hospede seu website hoje mesmo com a FRHOST, temos a melhor infraestrutura para hospedagem php, hospedagem de sites php, hospedar joomla, hospedagem de sites joomla, hospedagem Joomla, hospedagem wordpress, hospedagem cms e hospedagem php com mysql em geral.