GET (i kilka innych metod) są zdefiniowane jako „SAFE” w specyfikacji http ( RFC 2616 ):
9.1.1 Bezpieczne metody
Wdrażający powinni być świadomi, że oprogramowanie reprezentuje użytkownika w jego interakcjach przez Internet, i powinni być ostrożni, aby pozwolić użytkownikowi być świadomym wszelkich działań, które mogą podjąć, które mogą mieć nieoczekiwane znaczenie dla nich samych lub innych osób.
W szczególności ustanowiono konwencję, że metody GET i HEAD NIE POWINNY mieć znaczenia innego niż odzyskanie. Metody te należy uznać za „bezpieczne”. Pozwala to agentom użytkownika na reprezentowanie innych metod, takich jak POST, PUT i DELETE, w specjalny sposób, dzięki czemu użytkownik jest informowany o tym, że żądane jest potencjalnie niebezpieczne działanie.
Oczywiście nie można zapewnić, że serwer nie generuje skutków ubocznych w wyniku wykonania żądania GET; w rzeczywistości niektóre zasoby dynamiczne uważają tę funkcję. Ważnym rozróżnieniem jest tutaj to, że użytkownik nie zażądał skutków ubocznych, dlatego nie może być pociągnięty do odpowiedzialności za nie.
Oznacza to, że żądanie GET nigdy nie powinno mieć poważnych konsekwencji dla użytkownika, poza tym, że zobaczy coś, czego może nie chcieć zobaczyć, ale żądanie POST może zmienić zasób, który jest dla niego ważny lub dla innych osób.
Chociaż zmieniło się to w JavaScript, tradycyjnie istniały różne interfejsy użytkownika - użytkownicy mogli wywoływać żądania GET, klikając linki, ale musieli wypełnić formularz, aby wywołać żądanie POST. Myślę, że projektanci HTTP chcieli zachować rozróżnienie między metodami bezpiecznymi i niezabezpieczonymi.
Nie sądzę też, aby kiedykolwiek konieczne było przekierowanie do POST. Wszelkie działania, które należy wykonać, można przypuszczalnie wykonać przez wywołanie funkcji w kodzie serwera lub, jeśli trzeba to zrobić na innym serwerze, zamiast wysyłać przekierowanie zawierające adres URL przeglądarki do POST na serwer może wysłać zapytanie do tego samego serwera, działając jak proxy dla użytkownika.