GET (y algunos otros métodos) se definen como 'SEGURO' en la especificación http ( RFC 2616 ):
9.1.1 Métodos seguros
Los implementadores deben ser conscientes de que el software representa al usuario en sus interacciones a través de Internet, y deben tener cuidado para permitir que el usuario sea consciente de cualquier acción que pueda tomar que pueda tener un significado inesperado para ellos u otros.
En particular, se ha establecido que los métodos GET y HEAD NO DEBEN tener la importancia de tomar una acción que no sea la recuperación. Estos métodos deben considerarse "seguros". Esto permite a los agentes de usuario representar otros métodos, como POST, PUT y DELETE, de una manera especial, de modo que el usuario sea consciente del hecho de que se está solicitando una acción posiblemente insegura.
Naturalmente, no es posible garantizar que el servidor no genere efectos secundarios como resultado de realizar una solicitud GET; de hecho, algunos recursos dinámicos lo consideran una característica. La distinción importante aquí es que el usuario no solicitó los efectos secundarios, por lo que no se le puede hacer responsable de ellos.
Esto significa que una solicitud GET nunca debería tener una consecuencia grave para el usuario, más allá de ver algo que tal vez no quiera ver, pero una solicitud POST podría cambiar un recurso que es importante para ellos o para otras personas.
Aunque esto ha cambiado con JavaScript, tradicionalmente había diferentes interfaces de usuario: los usuarios podían activar solicitudes GET haciendo clic en los enlaces, pero tendrían que completar un formulario para activar una solicitud POST. Creo que los diseñadores de HTTP estaban interesados en mantener la distinción entre métodos seguros y no seguros.
Tampoco creo que deba ser necesario redirigir a una POST. Presumiblemente, cualquier acción que deba llevarse a cabo se puede realizar llamando a una función dentro del código del lado del servidor, o si tiene que suceder en un servidor diferente, en lugar de enviar una redirección que contenga una URL para que el navegador la envíe al servidor. podría hacer una solicitud a ese servidor en sí mismo, actuando como un proxy para el usuario.