Requisicoes get e post
Get e Post são os dois tipos principais de requisição HTTP

 

Neste tutorial trataremos sobre os dois tipos de requisição mais utilizados em um ambiente cliente-servidor, o método GET e o método POST. Abordaremos o que são estas requisições e quais são as suas principais diferenças. Neste tutorial há ainda um vídeo com um exemplo prático e um slide trazendo um panorama geral sobre requisições HTTP. Vale à pena conferir.

O que são requisições GET e POST?

Podemos dizer que são dois métodos de transferência de dados para o protocolo (conhecido como HTTP). Utilizando um desses métodos, é possível transferir informações de uma aplicação para a outra.

No método GET, toda informação é enviada para o sistema de destino junto ao endereço do sistema. Já o método POST, a informação é enviada de forma mais escondida e não irá aparecer na URL.

Claro que existem mais diferenças entre ambos, o método GET pode enviar uma quantidade de dados muito limitada, já o POST pode enviar uma quantidade de informação consideravelmente grande, o POST é mais seguro que o GET, entre muitas outras coisas.

Diagrama de requisição http
Diagrama de uma requisição http

O método GET

Com capacidade de 1024 caracteres, este método é utilizado quando se quer passar poucas ou pequenas informações para realizar uma pesquisa ou simplesmente passar uma informação para outra página através da URL (de Uniform Resource Locator). Caso este limite seja ultrapassado, corre-se o risco de obter um erro na página, uma vez que as informações foram passadas de forma incompleta. A função do método GET é pura e simplesmente recuperar um recurso existente no servidor. O resultado de uma requisição GET é “cacheável” pelo cliente, ou seja, fica no histórico do navegador. Por exemplo:

http://www.meusite.com.br/index.php?categoria=3&pag=2&tipo=5

Para entender melhor este exemplo, é preciso olhar para as informações que vêm logo após o sinal de interrogação “?”, pois é o símbolo que indica o início dos dados passados através da URL, ou seja, pelo método GET.

LEIA TAMBÉM  Como criar um hello world com Java Web e Maven de forma fácil

É importante observar que sempre vem um índice e um valor logo após o sinal de interrogação (Ex.: categoria=3) e quando se quer incluir mais de uma informação, acrescenta-se o símbolo “&” para concatenar o restante (Ex.: categoria=3&pag=2&tipo=5).

Ao clicar em um link (tag <a>), os dados ali contidos são enviados utilizando o método GET. Como os valores são passados pela URL e retornados ao cliente, as informações enviadas ficam visíveis, o que pode se tornar uma brecha na segurança, pois um visitante malicioso pode colocar algum código malicioso (SQL Injection, por exemplo) e fazer um belo estrago com o site, ou até mesmo o servidor.

Quando o objetivo é passar parâmetros confidenciais, como exemplo as senhas, não deve ser usado o método GET.

Por padrão a tag <form> envia dados utilizando o método GET. Para habilitar o método POST nos formulários é necessário incluir o atributo “method” com valor “POST”.

O método POST

Este método utiliza a URI (de Uniform Resource Identifier) para envio de informações ao servidor. A URI não é retornável ao cliente, o que torna o método POST mais seguro, pois não expõe os dados enviados no navegador. Como não tem limite de capacidade para envio de informações, este método se torna melhor que o GET. No POST, uma conexão paralela é aberta e os dados são passados por ela.

Uma requisição por meio desse método sempre requer que as informações submetidas sejam incluídas no corpo da mensagem e formatadas como uma query string, além de conter cabeçalhos adicionais especificando seu tamanho e seu formato. Mesmo que alguém mau intencionado obtenha acesso aos dados enviados pelo método POST, sem o tamanho dos dados e o formato correto será impossível lê-los.

O envio de dados é feito através de formulários (tag <form>), onde são passadas informações para outra página que deverá estar habilitada a recebê-las. Por padrão a tag <form> envia dados utilizando o método GET. Para habilitar o método POST nos formulários é necessário incluir o atributo “method” com valor “POST”.

LEIA TAMBÉM  Como utilizar o curl no terminal do Windows

Ao criar formulários de login deve-se utilizar o método POST para troca de informações entre as páginas.

Exemplo de um formulário com requisição POST:

<form name="formContato" method="POST" action="enviar_email.php">

  Nome: <input type="text" name="nome" /><br />
  E-mail: <input type="text" name="email" /><br />
  Mensagem:<br />
  <textarea name="mensagem" id="mensagem" cols="45" rows="5"></textarea>
  <br />
  <br />
  <input type="submit" name="button" id="button" value="Enviar Mensagem" />
</form>

 

Cliente x servidor. Requisicao x resposta
Cliente x servidor. Requisicao x resposta

Principais diferenças entre GET e POST

Visibilidade
A grande diferença entre os métodos GET e POST provavelmente é a visibilidade. Uma requisição GET é enviada como string anexada a URL, enquanto que a requisição POST é encapsulada junto ao corpo da requisição HTTP e não pode ser vista.

Tamanho
Como a requisição GET é feita via URL, obviamente há uma limitação no tamanho da mensagem enviada. Já na requisição POST não há limitações de comprimento da mensagem, já que a mesma é enviada no corpo da requisição HTTP.

Performance
A requisição GET é relativamente mais rápida, já que ela é mais simples. Na requisição POST há uma perda de tempo no encapsulamento da mensagem.

Tipos
Já que GET é enviado via URL, então nós sabemos que ela só transporta textos. A requisição POST não tem restrições, pode transportar tanto texto, como dados binários.

Favoritos/Bookmarks
Por se tratar apenas de uma URL, a requisição GET pode ser armazenada em cache, ou em um sistema de bookmark (favoritos). A mesma coisa não é possível para requisições POST.

Método HTML Padrão
GET é o método HTML padrão. Para submeter um formulário HTML usando POST é preciso especificar no atributo “method” o valor “POST”.

Dados
As requisições GET são limitadas ao padrão ASCII, enquanto que requisições POST também podem usar o atributo “enctype” com o valor “multipart/form-data”, que faz uso do padrão UCS (Universal Multiple-Octet Coded Character Set).

LEIA TAMBÉM  Maven - Primeiros passos

Diferença entre requisições GET e POST na prática

Este vídeo mostra a diferença entre os métodos get e post na prática através de uma pequena aula utilizando a linguagem PHP. Embora a linguagem seja PHP, o conceito permanece o mesmo para qualquer outra linguagem de programação. Assista!

Uma visão panorâmica sobre requisições HTTP

 

Outros métodos HTTP

Além dos métodos GET e POST, o protocolo HTTP possui ainda mais 7 métodos:

  • PUT
  • DELETE
  • HEAD
  • TRACE
  • CONNECT
  • OPTIONS
  • PATCH

Os métodos GET e POST são os mais conhecidos, pois, são os únicos que HTML 4 suporta.

Referencias:

Professor Torres- Diferença entre os métodos GET e POST
Marcelo Web – Principais diferenças entre GET e POST
Wikipedia com explicações detalhadas sobre requisições HTTP

Slide com a visão panorâmica sobre requisições GET e POST

Vídeo com exemplo prático de requisição HTTP no YouTube

Julio Victorio

Julio Victorio

Analista e desenvolvedor de sistemas em TI - Tecnologia e Inovação
Júlio Victório trabalha com web há mais de 10 anos, atualmente é desenvolvedor Java e ama escrever e trabalhar com tecnologia.
Julio Victorio
About Author:
Júlio Victório trabalha com web há mais de 10 anos, atualmente é desenvolvedor Java e ama escrever e trabalhar com tecnologia.