O porquê não utilizar GET para alterar estado no servidor

4/10/2011 Leia em 1 minuto

Olá pessoal,

É muito comum (ainda) desenvolvedores Web utilizarem os verbos Http Get e Post de maneira meio que “indiscriminada” para acessarem e/ou buscarem recursos no servidor Web, e digo isso independentemente da tecnologia de servidor que esta sendo utilizada (PHP, ASP.NET, JSF, Rails, Django e etc).

A ideia desse post é simplesmente alertar os desenvolvedores de alguns “perigos” da utilização errada dos verbos para fazer “ações” no servidor.

Em geral devemos pensar nos dois verbos literalmente como nós os lemos, ou seja, GET (SOMENTE para pegar recursos, ok?) e POST (Para postar algo, levar algo ao servidor e provavelmente mudar o estado de algo).

Existem vários motivos de não utilizarmos GET para fazer alterações de estado no servidor, alguns:

Portanto muito cuidado quando for alterar estado no servidor (adicionar/atualizar/deletar) via GET, pode ser um tanto quanto “perigoso” em alguns casos.

OK então vou sempre utilizar POST para fazer alteração de estado!

Perfeito, mas nesse caso se não fizermos “nada” na resposta dessa requisição teremos um problema chato.

Quem nunca depois de um POST de formulário tentou recarregar a página e PAM! Sim! Alerta do browser dizendo que vai reenviar tudo para o server (outro POST pra ser mais exato, podendo repetir por exemplo a inserção de algo no banco), é eu sei, você assim como eu já passou por isso.

Como resolver?

Até que é fácil, nesse caso devemos utilizar o padrão Post/Redirect/Get (sim é considerado um padrão), dessa forma evitamos esse comportamento chato que sempre acontece, no ASP.NET MVC é bem tranquilo de implementar inclusive.

Bom fica a dica, espero que vocês parem de utilizar GET pra fazer alteração de estado no server =)


By