HTTP: GET e POST - Conheça as diferenças entre os métodos

HTTP: GET e POST - Conheça as diferenças entre os métodos
Yuri Matheus
Yuri Matheus

Compartilhe

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.

Banner da Escola de DevOps: Matricula-se na escola de DevOps. Junte-se a uma comunidade de mais de 500 mil estudantes. Na Alura você tem acesso a todos os cursos em uma única assinatura; tem novos lançamentos a cada semana; desafios práticos. Clique e saiba mais!

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.

Yuri Matheus
Yuri Matheus

Yuri é desenvolvedor e instrutor. É estudante de Sistemas de Informação na FIAP e formado como Técnico em Informática no Senac SP. O seu foco é nas plataformas Java e Python e em outras áreas como Arquitetura de Software e Machine Learning. Yuri também atua como editor de conteúdo no blog da Alura, onde escreve, principalmente, sobre Redes, Docker, Linux, Java e Python.

Veja outros artigos sobre DevOps