Os métodos GET e POST


Autor/fonte: Vovó Vicki



Digg del.icio.us

O HyperText Transfer Protocol (Protocolo de Transferência de Hipertexto - HTTP) é o protocolo de comunicação utilizado para a troca de dados entre um navegador e um servidor web. É o protocolo de comunicação que você aciona quando digita um endereço no seu navegador: http://www...

É para isto que existem os métodos HTTP. Dois desses métodos, associados à transferência de dados de formulários, são muito importantes: o método GET e o método POST.

O método GET

GET, um dos métodos do HTTP, é acionado por meio de um formulário HTML através da diretiva method=get incluída na tag <form>. Por meio desse método, os dados constantes no formulário são primeiramente transmitidos ao software servidor e este, por sua vez, armazena os dados temporariamente numa variável de contexto denominada QUERY_STRING.

Um script CGI, chamado através da diretiva action= incluída na tag inicial do formulário, precisa extrair os dados dessa variável de contexto para poder obter os dados que lhe foram enviados (veja também variáveis de contexto). Usando Perl, por exemplo, é possível extrair esses dados com $dados_form = $ENV{'QUERY_STRING'};.

Quando um formulário HTML utiliza o método GET, o fluxo de dados é separado do endereço URL que chama a CGI através de um ponto de interrogação (?). Esta forma de endereçamento e separação pode ser observada no campo de endereços do navegador do usuário, logo após o formulário ter sido enviado. Você verá algo como:

http://www.meusite.com/meuscript.cgi?nome=Maria&amp;id=123

O método POST

POST, também um método do HTTP, é acionado por meio de um formulário HTML através da diretiva method=post incluída na tag <form>.

Este método faz com que os dados do formulário sejam diretamente transmitidos ao endereço que constar da diretiva action=. Um script CGI, chamado por action=, precisa extrair os dados através da entrada padrão (standart input) para poder obter os dados transmitidos pelo formulário. Pode-se, por exemplo, usar Perl e indicar read(STDIN, $Dados, $ENV{'CONTENT_LENGTH'});.

Observe que o programa precisa obter o valor da variável de contexto CONTENT_LENGTH para saber quantos caracteres precisam ser lidos através da entrada padrão. Isto é necessário porque não existe um caracter separador no fluxo de dados.

A importância de se conhecer o método

Se você quiser fazer uso de um script CGI pronto, precisa saber por qual dos dois métodos o script espera receber dados. Normalmente isto vem documentado pelo autor do script. Alguns scripts mais inteligentes testam ambos os métodos - neste caso, não importa o método de transferência de dados que você usar no formulário - ambos vão funcionar.

Se você for escrever seus próprios scripts, lembre-se de determinar o método que deve ser utilizado no formulário. Ou programe de maneira inteligente: deixe o script preparado para ambos os métodos.

Fluxo de dados na transmissão de dados de formulários

Um formulário HTML típico é composto por campos nominados (por exemplo para nome, endereço e comentário). Na transmissão do formulário preenchido para o servidor web / programa CGI, os dados precisam ser transmitidos de tal forma que o script CGI seja capaz de identificar os campos do formulário e os valores dos mesmos. É por isso que existe um método de codificação específico que separa os campos do formulário dos seus respectivos valores. Este método de codificação baseia-se nas seguintes regras:

. Cada um dos elementos do formulário, inclusive seus valores, são separados entre si pelo símbolo &amp; ("e" comercial ou ampersand);
. O nome e o valor (dados) de um elemento do formulário são separados por = (sinal de igual);
. Espaços em branco existentes nos dados (p.ex. várias palavras) são substituídos por + (sinal de adição);
. Todos os caracteres ASCII estendidos, com valores de 128 a 255 (hexadecimal 80 até FF), são substituídos por um conjunto constituído pelo sinal de % (porcento) seguido do valor hexadecimal do caracter (p.ex. o nosso ç (c cedilha) é substituído por %E7);
. Todos os caracteres utilizados nestas regras como delimitadores (ou seja, &amp;, +, = e %) também são convertidos em hexadecimal seguindo a mesma regra para os caracteres ASCII estendidos.

Exemplo de formulário

O exemplo seguinte mostra inicialmente o texto fonte de um formulário HTML e, logo abaixo, um gráfico mostrando como o formulário aparece num navegador. Logo abaixo do gráfico você poderá observar os dados codificados para a transmissão:

<form action="/cgi-bin/comentario.pl" method=post>
<pre>
Nome: <input name="NomeUsuario" size=40>
e-mail: <input name="MailUsuario" size=40>
Texto: <textarea rows=5 cols=34 name="Texto"></textarea>
<input type=submit value="Enviar Formulário">
</pre>
</form>




Enviado por xKuRt em 04/10/2006 às 08:28


Avaliação

Esta publicação ainda não foi avaliada!


Avaliar:


A avaliação de publicações é restrita a membros cadastrados e logados no nosso site.



Comentários

AvatarEnviado por PUUKASS em 14/01/2010 às 09:09

Cara muito bom o seu post mais acha que falta algum item de que fala no ultimo paragrafo!!!

--
PUUKASS


Envio de comentário:




  

Quinta, 23 de Outubro de 2014




Top 5 membros

Últimos membros online

Últimos membros cadastrados



Capa do livro
Scrum em Ação - Gerenciamento e Desenvolvimento Ágil de Projetos de Software


Capa do livro
Sistemas Operacionais


Capa do livro
TDD - Desenvolvimento Guiado por Testes





Hostnet

IMD