WS - Métodos GET e 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
emhttp://www.meusite.com/meuscript.cgi?nome=Maria&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 (p.ex. 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:
1) Cada um dos elementos do formulário, inclusive seus valores, são separados entre si pelo símbolo & ("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, &, +, = 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.


Nome:
e-mail:
Texto:



NomeUsuario=Spider&MailUsuario=spider@aldeia.com.br&Texto=Isto+%E9+um+exemplo+de+ coment%E1rio


Quando usamos uma seção form em uma página, pódemos definir um valor para o atributo HTML METHOD da tag de abertura FORM tanto para "GET" quanto para "POST".
O padrão, se omitido, é "GET". Se usarmos "GET" ou omitirmos o atributo, o navegador junta os valores de todos os controles no formulário e uma cadeia de consulta e a anexa ao URL da página sendo solicitada.
Quando esta solicitação chega em nosso servidor da Web, ela é exposta através da coleção ASP request.QueryString. No entanto, se definirmos o atributo METHOD parea "POST", o navegador junta os valores dentro dos cabeçalhos HTTP que ele envia para o servidor, e eles são expostos para a ASP através da coleção Request.Form.

De um modo geral, você deveria usar o método POST em todos os seus formulários HTML. Existem limites impostos pelo navegador e servidor quanto ao comprimento da cadeia URL, pois anexar uma cadeia de consulta longa pode provocar um overflow e alguns dos valores podem ficar truncados. Também, a cadeia de consulta aparece na barra de endereços do navegador e em todos favoritos e links gravados. Isto não apenas é feio, mas também expõe valores que você pode não querer que apareçam na solicitação HTTP quando ela passa para Web, ou quando ela aparece nos seus e em outros arquivos de log do servidor en-route. Valores dentro dos cabeçalhos de solicitação HHTP são menos visíveis e não aparecem em arquivos de log.

Deve-se estar ciente quanto a um pequeno detalhe: com o método POST os valores em um formulário não persistem. Quando um usuário recarrega um form, os valores estão em branco e têm que ser reinseridos. No entanto, quando anexados ao URL que é armazenado como um link ou favorito, eles persistem, e portanto aparecerão em todas as solicitações para aquela combinação URL/cadeia de cosulta. Isto pode ser uma vantagem ou desvantagem, dependendo de sua aplicação.

Comentários

Postagens mais visitadas deste blog

Redação Ti Nota 10 - Klauss

Prova Discursiva nota 10 - Banca Cespe

Portugues - Orações