HTTP: GET e POST - Conheça as diferenças entre os métodos
Quando vamos acessar um sistema web, é bem comum passar por uma tela de login, na qual colocamos nossas credenciais para ter acesso ao sistema.
Essas informações devem ser sigilosas, porém, quando fui tentar logar em uma aplicação web que estou desenvolvendo, tive o seguinte resultado:
Veja que nossos parâmetros (e-mail e senha) foram passados pela URI, o que não é muito seguro não é? Geralmente quando fazemos login em alguns sites isso não acontece, pelo menos na maioria deles.
Essas informações na URL ficam expostas, não apenas caso alguém esteja perto e veja o que você digitou. Mas também quando essas informações trafegam na internet. O que é uma vulnerabilidade na segurança.
O que define o local onde os parâmetros são passados é o protocolo de comunicação da web, o HTTP.
Conhecendo o HTTP
O HTTP é o protocolo responsável pela comunicação de sites na web. Quando acessamos um site, é esse protocolo que utilizamos. Esse protocolo possui alguns métodos, ou, como também são chamados, verbos.
Os verbos HTTP definem qual ação deve ser realizada e, dependendo do verbo, o servidor pode dar uma resposta diferente.
Conhecendo os verbos
Um dos verbos mais comuns do HTTP é o GET
. Quando utilizamos o GET
, os parâmetros são passados no cabeçalho da requisição. Por isso, podem ser vistos pela URI, como no caso do nosso formulário de login.
Esse verbo é o padrão para enviar dados quando submetemos um formulário HTTP. Por isso no exemplo acima, foi utilizado o GET. Contudo, conseguimos alterar esse comportamento dizendo para o formulário qual do método (method
) ele deve usar.
No caso de formulários web, é muito comum que esse método seja o POST
:
<form action="/logar" method="post">
O POST
, ao contrário do GET
, envia os parâmetros no corpo da requisição HTTP. Escondendo eles da URI:
Então isso significa que se utilizarmos o POST
protegemos os dados submetidos pelo formulário, já que eles não aparecem na URI?
Não exatamente. A única coisa que o POST
faz é enviar os parâmetros no corpo da requisição. Se inspecionarmos a requisição, conseguimos acesso a eles:
Se quisermos proteger, de fato, nossa aplicação, precisamos utilizar a "versão segura" do HTTP, o HTTPS. Com ela, conseguimos criptografar os dados enviados.
Ambos os verbos são muito utilizado em formulários na web e possuem algumas outras diferenças entre si.
Como o GET
envia os dados no cabeçalho da requisição, ele tende a ser, não é uma regra,um pouco mais performático que o POST
.
Porém, por enviar os dados no cabeçalho da requisição, o GET
tem um tamanho máximo de dados que podem ser enviados, que no geral é de 255
caracteres. Com POST
, podemos enviar informações um pouco maiores, como imagens. Ou seja, se tentarmos passar uma grande quantidade de informações via GET
, algumas partes podem ser perdidas no caminho.
Com isso você pode estar pensando que utilizar o POST
é o melhor caminho já que ele encapsula os dados no corpo da requisição e consegue transportar mais dados que o GET
, portanto, vamos utilizar o POST
em todo lugar.
Porém, se existem dois verbos diferentes, é porque eles foram feitos para serem utilizados em locais diferentes.
As requisições do tipo GET
são recomendadas para obter dados de um determinado recurso. Como em um formulário de busca ou em uma listagem de todos os produtos cadastrados.
Já as requisições POST
são mais utilizadas para para enviar informações para serem processadas, como por exemplo, criar algum recurso, como um produto, ou um cliente.
Conhecendo outros verbos
Além do GET
e do POST
, existem outros verbos HTTP que podem ser utilizados. Por exemplo, se quisermos deletar algum recurso, podemos utilizar o verbo DELETE
.
Já se quisermos atualizar os dados, podemos utilizar o PUT
, que substitui todas as informações de um determinado recurso, por exemplo um produto. Ou então utilizar o verbo PATCH
que atualiza parcialmente os dados de um produto.
Todos esses verbos são muito utilizados no mundo web. Principalmente quando estamos utilizando o modelo REST.
Conhecer o protocolo HTTP e seus verbos é muito valioso para um desenvolvedor web. Já que podemos construir aplicações melhores. Por isso, aqui na Alura temos um curso sobre o protocolo HTTP.
Nele você aprenderá como a web funciona, verá verbos como o GET e o POST, aprenderá sobre o modelo REST e sobre o HTTP/2, a nova versão do protocolo.