Scripts CGI em C

Interação entre um browser e um Servidor Web

Quando você acessa uma URL através de um navegador (browser), por exemplo, http://www.ic.unicamp.br/~celio/mc823-2008/a6.html, o browser faz o seguinte:

Envio de dados de um formulário HTML e seu processamento via script CGI

Um formulário HTML possue campos de diversos tipos para envio de dados a um Servidor Web. Esses dados devem ser lidos e processados por um programa hospedado no servidor (genericamente chamado de script CGI) e cujo caminho é especificado como atributo do elemento FORM do formulário. Por exemplo, veja o "source" deste formulário simples. O browser abre a conexão TCP na porta 80 do servidor web da forma usual. Os dados do formulário são enviados pelo browser através do método POST (outro atributo do elemento FORM) do protocolo HTTP no corpo da mensagem POST, codificados na forma URL encoding: os campos do formulário são separados pelo caracter '&' e cada campo do formulário tem o formato:
nome_do_campo=valor_do_campo_URL_encoded
O script CGI pode ser escrito em diversas linguagens (Java, PHP, Python, Perl, C, etc). Ao invocar o script CGI o servidor web redireciona o descritor do socket (com o qual está conectado ao browser que enviou os dados do formulário) para a entrada e saída padrão (via comando dup2) Desta forma o script CGI, se escrito em C, pode ler, por exemplo, via fread(....,stdin) a mensagem POST enviada pelo browser e pode enviar de volta ao browser comandos HTML via, por exemplo, printf() ou fputs(). A resposta à mensagem POST possui um cabeçalho especificando o tipo Mime do conteúdo da resposta, para que o browser possa exibi-la de forma apropriada (html, gif, jpeg, etc). Se a resposta for uma página HTML este cabeçalho teria o formato:
Content-Type: text/html
(linha em branco aqui)
comandos HTML em seguida
Como os dados que vem do browser na mensagem POST estão codificados no formato "URL encoded" é preciso transcodificá-los para o formato original.
Scripts CGI mais elaborados usualmente acessam um Base de Dados (MySql, por exemplo) e com os dados obtidos da Base de Dados constroem dinamicamente uma página HTML que é enviada de volta ao browser.