CGI chamada através do método GET

No método GET, os dados são "concatenados" ao URL depois de um '?':

http://alguma.máquina/cgi-bin/regista.pl?login=guest

O servidor ao receber um URL com uma query-string, chama o programa cgi identificado na 1ª parte do URL (antes do '?') e guarda a parte depois do '?' na variável de ambiente QUERY_STRING. Supondo que o utilizador digitou "guest" no campo login, quando o botão submit é clicado, o browser envia, ao servidor, um pedido do tipo:

GET /cgi-bin/regista.pl?login='guest' HTTP/1.0
Accept: www/source
Accept: text/html
Accept: image.gif
User-Agent: Lynx/2.4 libwww/2.14
From: shisshir@bu.edu

O pedido GET identifica o ficheiro a enviar (cgi-bin/regista.pl). Desde que o servidor esteja configurado para reconhecer todos os ficheiros no directório cgi-bin como sendo um programa cgi, executa o programa em vez de enviar o documento directamente ao browser, além disso coloca a string login='guest' na variável de ambiente QUERY_STRING.
HTTP/1.0 identifica o tipo de protocolo usado.

As aplicações CGI podem retornar praticamente quaisquer tipo de documentos virtuais, desde que o cliente os consiga gerir apropriadamente, por essa razão o pedido do cliente também passa o formato de dados que ele pode aceitar (www/source, text/html, image.gif), sendo essa informação guardada na variável de ambiente HTTP_ACCEPT e o programa CGI analisa essa variável para assegurar que retorna um ficheiro num formato que o browser pode gerir. Este pedido identifica um cliente Lynx e envia informação do user. Toda esta informação é tornada disponível para o programa CGI, juntamente com informação adicional do servidor.

Programa CGI capaz de gerir esta informação

#! /usr/local/bin/tclsh
/* Diz ao servidor para correr o interpretador tcl localizado no directório /usr/local/bin/ para executar o programa cgi/*

puts "Content-type: text/plain", "\n\n"
set query_string $ENV{'QUERY_STRING'};
set par [split $query_string = ]
set field_name [lindex $par 0]
set command [lindex $par 1]
if {$command == "guest"} {
puts "usr/local/bin/guest"
} elsif {$command == "mgi"} {
puts "usr/ucb/mgi"
} else {
puts "usr/local/bin/outro";
}
exit(0);

<<< tema anterior                          próximo tema >>>