Nie generuj stron przez POST!

Jakieś 9 miesięcy temu, zirytowany błędami w naszej podstawowej aplikacji, wprowadziłem na rozmowę kwalifikacyjną pytanie o różnice pomiędzy żądaniami GET a POST. Srodze się rozczarowałem: od tego czasu przeprowadziłem z 50 rozmów, i tylko 1 (słownie: jedna!) osoba znała prawidłową odpowiedź.

Typowe odpowiedzi błąkały się wśród szczegółów technicznych: że GET to idzie w nagłówkach żądania, a POST w ciele żądania, że przez POST to można przesłać pliki, a przez GET to nie możliwe itp. Parę osób stwierdziło, że parametrów przesłanych przez POST nie widać w pasku URL przeglądarki. Nie wyciągnęły jednak z tego żadnych dalszych wniosków.

W zasadzie podane odpowiedzi są jak ze starego dowcipu - w 100% poprawne ale nikomu do niczego niepotrzebne. Pomijają najważniejszą sprawę: strony wygenerowanej przez POST nie da się wysłać mailem, przez komunikator czy zapisać w historii przeglądarki. Nie da się jej wykopać czy podlinkować. A nawet odświeżenie nie jest możliwe, bez obejrzenia wariacji na temat “strona wygasła”.

Nie mówię oczywiście, że należy zrezygnować z używania POST. Nie wolno tylko generować kodu HTML po takim żądaniu. Zakładanie konta, oczywiście, powinno być obsłużone przez POST, a po pomyślnym zalogowaniu należy przekierować na stronę z podziękowaniami. Głosowanie w sondach, logowanie, edycja danych i inne tego typu operacje powinny kończyć się wygenerowaniem nagłówka Location i przekierowaniem na nowy adres.

Natomiast każdy formularz, który ma na celu wygenerowanie strony (np. wyszukiwanie), powinien być obsłużony przez GET.

1 Komentarz

  1. minek on maj 6th, 2008

    Hmm, czyli co pierwszy i w ogóle pierwszy?

Twój komentarz