GET (und einige andere Methoden) sind in der http-Spezifikation ( RFC 2616 ) als 'SAFE' definiert :
9.1.1 Sichere Methoden
Implementierer sollten sich darüber im Klaren sein, dass die Software den Benutzer bei seinen Interaktionen über das Internet repräsentiert, und sie sollten darauf achten, dass der Benutzer über mögliche Maßnahmen informiert wird, die für sich selbst oder andere eine unerwartete Bedeutung haben können.
Insbesondere wurde festgelegt, dass die Methoden GET und HEAD NICHT die Bedeutung haben DÜRFEN, eine andere Aktion als das Abrufen durchzuführen. Diese Methoden sollten als "sicher" angesehen werden. Auf diese Weise können Benutzerprogramme andere Methoden wie POST, PUT und DELETE auf besondere Weise darstellen, sodass der Benutzer auf die Tatsache aufmerksam gemacht wird, dass eine möglicherweise unsichere Aktion angefordert wird.
Natürlich kann nicht sichergestellt werden, dass der Server keine Nebenwirkungen infolge der Ausführung einer GET-Anforderung erzeugt. Einige dynamische Ressourcen betrachten dies sogar als eine Funktion. Der wichtige Unterschied hierbei ist, dass der Benutzer die Nebenwirkungen nicht angefordert hat und daher nicht für sie verantwortlich gemacht werden kann.
Dies bedeutet, dass eine GET-Anforderung keine schwerwiegenden Konsequenzen für den Benutzer haben sollte, abgesehen davon, dass sie etwas sieht, das er möglicherweise nicht sehen möchte. Eine POST-Anforderung kann jedoch eine Ressource ändern, die für ihn oder andere Personen wichtig ist.
Obwohl sich dies mit JavaScript geändert hat, gab es traditionell verschiedene Benutzeroberflächen - Benutzer konnten GET-Anforderungen durch Klicken auf Links auslösen, mussten jedoch ein Formular ausfüllen, um eine POST-Anforderung auszulösen. Ich denke, die Entwickler von HTTP waren daran interessiert, die Unterscheidung zwischen sicheren und nicht sicheren Methoden beizubehalten.
Ich denke auch nicht, dass es jemals notwendig sein sollte, zu einem POST umzuleiten. Jede Aktion, die ausgeführt werden muss, kann vermutlich durch Aufrufen einer Funktion innerhalb des serverseitigen Codes oder, wenn sie auf einem anderen Server ausgeführt werden muss, anstatt eine Umleitung mit einer URL für den Browser an den POST an den Server zu senden, ausgeführt werden könnte eine Anfrage an diesen Server selbst richten und sich wie ein Proxy für den Benutzer verhalten.