Diferença entre os métodos GET e POST

Ao desenvolver um site dinâmico, existe a necessidade de passar alguns valores de uma página para a outra, para realizar operações como consultas e inserções no banco, autenticação de usuários, etc.

É de extrema importância saber bem a diferença entre os métodos GET e POST, para que se possa utilizá-los de forma correta e na hora certa.

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 vem 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.

É 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.

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”.

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