A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Informática Numaboa - Tutoriais e Programação

Tutorial CGI - Introdução

Seg

17

Nov

2008


19:20

(6 votos, média 4.67 de 5) 


Meus mais sinceros agradecimentos a Stefan Münz, principal fonte de referência para este tutorial e autor de todos os exemplos nele contidos. Seu livro sobre HTML, escrito em alemão, é um dos melhores (senão o melhor) que já encontrei e está à disposição na web gratuitamente com uma boa parte já traduzida para o inglês.

O que é CGI

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 browsers (navegadores como o Internet Explorer, Firefox ou Netscape). Tecnicamente, os navegadores deveriam ser chamados de clientes web e, as pessoas que os utilizam, deveriam ser chamadas 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 é...

... 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, uma imagem ou qualquer outro tipo de arquivo.

Quando o servidor web recebe uma solicitação, realiza três tarefas na seguinte ordem:

  1. 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.
  2. Envia uma linha em branco.
  3. Envia o conteúdo do arquivo.

Como o servidor web envia arquivos

Um de cada vez. Por incrível que pareça, apenas UM de cada vez.

Sabemos que uma página de web típica é constituída por um documento HTML e por algumas imagens. 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 arquivos. Ele simplesmente lê os dados do arquivo e os transmite para o cliente. Como resultado deste 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 dado que você estará enviando, você precisa suprir a saída padrão com esta informação.

Também foi dito 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:

    1a. Tarefa: identificar o tipo de dados que serão enviados
    echo Content-type: text/plain

    2a. Tarefa: enviar uma linha em branco
    echo

    3a. Tarefa: enviar o conteúdo
    dir

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, processá-lo e assim por diante.

É 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 e nos quais a URL esteja sendo logada!
  • Os dados 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 de outra fonte qualquer).

Assim que os dados tenham sido recebidos (lidos pelo servidor), podem ser imediatamente 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";

mfx опционыкупить воклобановский александр женаможно лисети интернет поисковая оптимизация сайтаанализ реинжиниринг бизнес процессовbroker mfx

Informações adicionais