Z tego, co mogę zebrać, są trzy kategorie:
- Nigdy nie używaj
GET
i nie używajPOST
- Nigdy nie używaj
POST
i nie używajGET
- Nie ma znaczenia, którego używasz.
Czy mam rację zakładając te trzy przypadki? Jeśli tak, jakie są przykłady z każdego przypadku?
Odpowiedzi:
Używaj
POST
do destrukcyjnych działań, takich jak tworzenie (zdaję sobie sprawę z ironii), edytowanie i usuwanie, ponieważ nie możesz trafićPOST
akcji w pasek adresu przeglądarki. Użyj,GET
gdy jest to bezpieczne, aby umożliwić osobie wezwanie akcji. A więc taki adres URL:Powinieneś przejść do strony z potwierdzeniem, zamiast po prostu usunąć element. W ten sposób znacznie łatwiej uniknąć wypadków.
POST
jest również bezpieczniejszy niżGET
, ponieważ nie umieszczasz informacji w adresie URL. Dlatego użycieGET
jakomethod
formularza HTML, który zbiera hasło lub inne poufne informacje, nie jest najlepszym pomysłem.Ostatnia uwaga:
POST
może przesyłać większą ilość informacji niżGET
. „POST” nie ma ograniczeń wielkości przesyłanych danych, a „GET” jest ograniczony do 2048 znaków.źródło
W skrócie
GET
dlasafe and
idempotent
wnioskówPOST
dlaneither safe nor idempotent
wnioskówW szczegółach Dla każdego jest odpowiednie miejsce. Nawet jeśli nie przestrzegasz zasad RESTful , możesz wiele zyskać na wiedzy o REST i sposobie działania podejścia zorientowanego na zasoby.
ZA
safe
Operacja jest operacją, która manot change the data
wymagane.Na
idempotent
Operacja jest taka, w której wynik będziebe the same
bez znaczenia, ile razy można zażądać go.Jest oczywiste, że ponieważ GET są używane do bezpiecznych operacji, są one również automatycznie idempotentne . Zazwyczaj GET służy do pobierania zasobu (na przykład pytania i powiązanych odpowiedzi na temat przepełnienia stosu) lub gromadzenia zasobów.
Wiem, że pytanie dotyczyło GET i POST, ale wrócę do POST za sekundę.
Zazwyczaj PUT jest używany do edycji zasobu (na przykład edycja pytania lub odpowiedzi na temat przepełnienia stosu).
Zazwyczaj POST byłby użyty do utworzenia nowego zasobu, na przykład do utworzenia NOWEGO pytania SO (chociaż w niektórych projektach PUT byłby również do tego użyty).
Jeśli uruchomisz POST dwa razy, utworzysz DWIE nowe pytania.
Dyskusja
W praktyce współczesne przeglądarki internetowe zazwyczaj niezawodnie obsługują tylko metody GET i POST (wszystkie te operacje można wykonywać za pomocą wywołań javascript, ale pod względem wprowadzania danych w formularzach i naciskania przycisku przesłania zazwyczaj dostępne są dwie opcje). W aplikacji RESTful test POST często jest zastępowany w celu zapewnienia wywołań PUT i DELETE.
Ale nawet jeśli nie przestrzegasz zasad RESTful, warto zastanowić się nad użyciem GET do pobierania / przeglądania informacji i POST do tworzenia / edycji informacji.
Nigdy nie powinieneś używać GET do operacji, która zmienia dane. Jeśli wyszukiwarka zaindeksuje link do Twojej zła operacji lub zakładek klienta, może to oznaczać duże problemy.
źródło
Użyj GET, jeśli nie przeszkadza ci powtarzanie żądania (to znaczy, że nie zmienia stanu).
Użyj POST, jeśli operacja zmienia stan systemu.
źródło
method
obowiązkowe)Krótka wersja
POBIERZ: Zwykle używany do przesłanych żądań wyszukiwania lub każdego żądania, w którym użytkownik ma mieć możliwość ponownego wyświetlenia dokładnej strony.
Zalety GET:
Wady GET:
POST: Używany do żądań o wyższym poziomie bezpieczeństwa, w których dane mogą być użyte do zmiany bazy danych lub strony, której nie chcesz, aby ktoś dodawał do zakładek.
Zalety POST:
Wady POST:
Dłuższa wersja
Bezpośrednio z protokołu przesyłania hipertekstu - HTTP / 1.1 :
źródło
Pierwszą ważną rzeczą jest znaczenie GET kontra POST:
Następnie kilka rzeczy, które można zauważyć:
W każdym razie nie sądzę, że moglibyśmy „żyć” bez GET: pomyśl, ile adresów URL używasz z parametrami w ciągu zapytania, każdego dnia - bez GET wszystkie one nie działałyby ;-)
źródło
http://example.com/var1/value1/var2/value2/var3/value3
moglibyśmy „technicznie” już nie mieć GET…www.mypage.com/contact/
zastosowania GET wewnętrznie do czegoś takiegoindex.php?url=/contact/
Oprócz różnicy ograniczeń długości w wielu przeglądarkach internetowych istnieje również różnica semantyczna. GET-y powinny być „bezpieczne”, ponieważ są operacjami tylko do odczytu, które nie zmieniają stanu serwera. Testy POST zazwyczaj zmieniają stan i ostrzegają przy ponownym przesyłaniu. Przeszukiwacze sieci wyszukiwarek mogą uzyskiwać GET, ale nigdy nie powinni wykonywać POST.
Użyj GET, jeśli chcesz odczytać dane bez zmiany stanu, i użyj POST, jeśli chcesz zaktualizować stan na serwerze.
źródło
Moją ogólną zasadą jest używanie Get, gdy wysyłasz żądania do serwera, które nie zamierzają zmieniać stanu. Posty są zarezerwowane dla żądań do serwera, które zmieniają stan.
źródło
Jedną praktyczną różnicą jest to, że przeglądarki i serwery WWW mają ograniczenie liczby znaków, które mogą istnieć w adresie URL. Różni się od aplikacji do aplikacji, ale z pewnością można ją trafić, jeśli masz
textarea
w swoich formularzach.Kolejna gotcha z GET-ami są one indeksowane przez wyszukiwarki i inne systemy automatyczne. Google miał kiedyś produkt, który wstępnie pobierałby linki na oglądanej stronie, więc ładowanie ich byłoby szybsze, gdybyś kliknął te linki. Spowodowało to poważne spustoszenie w witrynach, które miały takie linki
delete.php?id=1
- ludzie stracili całe swoje witryny.źródło
Użyj GET, jeśli chcesz, aby adres URL odzwierciedlał stan strony. Jest to przydatne do przeglądania dynamicznie generowanych stron, takich jak te widoczne tutaj. POST powinien być używany w formularzu do przesyłania danych, na przykład po kliknięciu przycisku „Opublikuj swoją odpowiedź”. Tworzy również czystszy adres URL, ponieważ nie generuje ciągu parametrów po ścieżce.
źródło
Ponieważ GET są wyłącznie adresami URL, mogą być buforowane przez przeglądarkę internetową i mogą być lepiej wykorzystywane do rzeczy takich jak stale generowane obrazy. (Ustaw czas wygaśnięcia)
Jeden przykład ze strony gravatar: http://www.gravatar.com/avatar/4c3be63a4c2f539b013787725dfce802?d=monsterid
GET może nieznacznie poprawić wydajność, niektóre serwery WWW zapisują zawartość POST do pliku tymczasowego przed wywołaniem programu obsługi.
Inną rzeczą do rozważenia jest ograniczenie rozmiaru. Pliki GET są ograniczone przez rozmiar adresu URL, 1024 bajty według standardu, chociaż przeglądarki mogą obsługiwać więcej.
Przesyłanie większej ilości danych niż ta powinna wymagać testu POST, aby uzyskać lepszą kompatybilność przeglądarki.
Nawet mniej niż ten limit stanowi problem, jak napisał inny plakat, wszystko w adresie URL może skończyć się w innych częściach interfejsu użytkownika przeglądarki, takich jak historia.
źródło
Nic nie możesz zrobić per se. Chodzi o to, że nie jesteś powinien zmodyfikować stan serwera przez HTTP GET. Serwery proxy HTTP zakładają, że skoro HTTP GET nie modyfikuje stanu, to czy użytkownik wywołuje HTTP GET raz czy 1000 razy, nie ma znaczenia. Korzystając z tych informacji, zakładają, że bezpieczne jest zwrócenie buforowanej wersji pierwszego HTTP GET. Jeśli złamiesz specyfikację HTTP, ryzykujesz zerwanie klienta HTTP i serwerów proxy na wolności. Nie rób tego :)
źródło
Przechodzi to do koncepcji REST i tego, w jaki sposób Internet był przeznaczony do użycia. Jest doskonały podcast radiu Software Engineering który szczegółowo omawia korzystanie z Get i Post.
Get służy do pobierania danych z serwera, na którym działanie aktualizacji nie powinno być potrzebne. Chodzi o to, że powinieneś mieć możliwość korzystania z tego samego żądania GET w kółko i zwracania tych samych informacji. Adres URL zawiera informację „get” w ciągu zapytania, ponieważ miał być łatwy do wysłania do innych systemów i osób takich jak adres, pod którym można coś znaleźć.
Post ma być wykorzystywany (przynajmniej przez architekturę REST, na której opiera się sieć) do przesyłania informacji do serwera / nakazania serwerowi wykonania akcji. Przykłady takie jak: Zaktualizuj te dane, Utwórz ten rekord.
źródło
1.3 Szybka lista kontrolna do wyboru HTTP
GET
lubPOST
Użyj GET, jeśli:
Użyj POST, jeśli:
Źródło .
źródło
Używanie go do aktualizacji stanu - podobnie jak GET lub
delete.php?id=5
usuwanie strony - jest bardzo ryzykowne. Ludzie dowiedzieli się, że gdy akcelerator internetowy Google zaczął pobierać adresy URL na stronach - trafił we wszystkie linki „usuń” i wymazał dane ludzi. To samo może się stać z pająkami wyszukiwarek.źródło
POST może przenosić duże dane, podczas gdy GET nie.
Ale ogólnie rzecz biorąc, nie chodzi o niedociągnięcie GET, a raczej o konwencję, jeśli chcesz, aby twoja strona internetowa / aplikacja działała ładnie.
Zajrzyj na http://www.w3.org/2001/tag/doc/whenToUseGet.html
źródło
Z RFC 2616 :
źródło
Używam POST, gdy nie chcę, aby ludzie widzieli QueryString lub gdy QueryString robi się duży. POST jest również potrzebny do przesyłania plików.
Jednak nie widzę problemu z korzystaniem z GET, używam go do prostych rzeczy, w których sensowne jest utrzymywanie rzeczy w QueryString.
Użycie GET pozwoli na linkowanie do konkretnej strony, gdzie POST nie będzie działać.
źródło
Pierwotnym zamiarem było użycie GET do odzyskania danych i POST miał być czymkolwiek. Zasadą, której używam jest to, że jeśli wysyłam coś z powrotem na serwer, używam POST. Jeśli dzwonię pod adres URL, aby odzyskać dane, używam GET.
źródło
Przeczytaj artykuł o HTTP w Wikipedii . Wyjaśni, czym jest protokół i co robi:
i
W3C ma dokument o nazwie URI, Adresowalność oraz użycie HTTP GET i POST, który wyjaśnia, kiedy z czego korzystać. Cytowanie
i
Praktycznym przykładem może być przesłanie formularza HTML. Możesz podać post lub get dla akcji formularza. PHP odpowiednio zapełni $ _GET i $ _POST.
źródło
W PHP
POST
limit danych jest zwykle ustawiany przez użytkownikaphp.ini
.GET
Uważam, że jest ograniczony ustawieniami serwera / przeglądarki - zwykle około255
bajtów.źródło
Od w3schools.com :
Tutaj wyróżniamy główne różnice:
źródło
Prosta wersja POST GET PUT DELETE
źródło
Cóż, jedną ważną rzeczą jest to, że wszystko, co przesyłasz,
GET
zostanie ujawnione za pośrednictwem adresu URL. Po drugie, jak mówi Ceejayoz, istnieje limit znaków w adresie URL.źródło
Inna różnica polega na tym, że POST zazwyczaj wymaga dwóch operacji HTTP, podczas gdy GET wymaga tylko jednej.
Edycja: powinienem wyjaśnić - dla typowych wzorców programowania. Generalnie odpowiadanie na POST prostą stroną HTML jest wątpliwym projektem z różnych powodów, z których jednym jest denerwujące „musisz ponownie przesłać ten formularz, czy chcesz to zrobić?” po naciśnięciu przycisku Wstecz.
źródło
expect: 100-continue
nagłówkiem, a następnie wysyłanie danych tylko wtedy, gdy serwer odpowiada za pomocą100 CONTINUE
.Zgodnie z odpowiedzią innych, w przypadku get istnieje ograniczenie rozmiaru adresu URL, a pliki można przesyłać tylko pocztą.
Chciałbym dodać, że można dodawać rzeczy do bazy danych za pomocą polecenia get i perform z postem. Kiedy skrypt otrzymuje post lub get, może zrobić wszystko, co chce autor. Uważam, że brak zrozumienia wynika z sformułowania, które wybrała książka lub z tego, jak ją czytasz.
Autor skryptu powinien używać postów do zmiany bazy danych i używać get tylko do pobierania informacji.
Języki skryptowe zapewniały wiele środków dostępu do żądania. Na przykład PHP pozwala na użycie
$_REQUEST
do pobrania posta lub get. Należy tego unikać na rzecz bardziej szczegółowych$_GET
lub$_POST
.W programowaniu internetowym jest znacznie więcej miejsca na interpretację. Jest to, co należy i co można zrobić, ale to, co jest lepsze, często jest przedmiotem dyskusji. Na szczęście w tym przypadku nie ma dwuznaczności. Państwo powinno używać posty zmianę danych, a powinno używać się do pobierania informacji.
źródło
Gorgapor,
mod_rewrite
wciąż często wykorzystujeGET
. Pozwala jedynie przetłumaczyć bardziej przyjazny adres URL na adres URL zGET
ciągiem zapytania.źródło
Dane HTTP Post nie mają określonego limitu ilości danych, ponieważ różne przeglądarki mają różne limity GET. RFC 2068 stanowi:
W szczególności powinieneś mieć odpowiednie konstrukcje HTTP do tego, do czego są używane. HTTP GET nie powinny mieć skutków ubocznych i mogą być bezpiecznie odświeżane i przechowywane przez proxy HTTP itp.
POST HTTP są używane, gdy chcesz przesłać dane do zasobu URL.
Typowym przykładem użycia HTTP GET jest wyszukiwanie, tzn. Wyszukiwanie? Zapytanie = moje + zapytanie Typowym przykładem użycia HTTP POST jest przesyłanie opinii do formularza online.
źródło