Kiedy należy użyć metody GET lub POST? Jaka jest różnica między nimi?

Jaka jest różnica przy stosowaniu metody GET LUB POST? Który jest bardziej bezpieczny? Jakie są (nie)zalety każdego z nich?

(podobne pytanie )

Author: Community, 2009-02-02

14 answers

To nie jest kwestia bezpieczeństwa. Protokół HTTP definiuje żądania typu GET jako idempotent , podczas gdy posty mogą mieć skutki uboczne. W prostym języku angielskim oznacza to, że GET jest używany do przeglądania czegoś, bez zmiany tego, podczas gdy POST jest używany do zmiany czegoś. Na przykład strona wyszukiwania powinna używać GET, a Formularz zmieniający hasło powinien używać POST.

Zauważ również, że PHP nieco myli pojęcia. Żądanie POST pobiera dane z łańcucha zapytania i poprzez ciało żądania. Żądanie GET pobiera tylko dane wejściowe z ciągu zapytania. Tak więc żądanie POST jest supersetem żądania GET; możesz użyć $_GET w żądaniu POST, a nawet może mieć sens posiadanie parametrów o tej samej nazwie w $_POST i $_GET, które oznaczają różne rzeczy.

Na przykład, załóżmy, że masz formularz do edycji artykułu. Article-id może znajdować się w łańcuchu zapytania (a więc jest dostępny przez $_GET['id']), ale załóżmy, że chcesz zmienić article-id. Nowy dowód może następnie bądź obecny w treści żądania ($_POST['id']). OK, może to nie jest najlepszy przykład, ale mam nadzieję, że obrazuje różnicę między tymi dwoma.

 271
Author: troelskn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:22

Gdy użytkownik wprowadza informacje w formularzu i kliknie przycisk Prześlij , istnieją dwa sposoby przesyłania informacji z przeglądarki do serwera: w adresie URL lub w treści żądania HTTP.

Metoda GET, która została użyta w przykładzie wcześniej, dodaje pary nazwa / wartość do adresu URL. Niestety, długość adresu URL jest ograniczona, więc ta metoda działa tylko wtedy, gdy jest tylko kilka parametrów. Adres URL może zostać skrócony, jeśli formularz wykorzystuje dużą liczbę parametrów, lub jeśli parametry zawierają duże ilości danych. Ponadto parametry przekazywane na adres URL są widoczne w polu adresu przeglądarki nie jest to najlepsze miejsce do wyświetlania hasła.

Alternatywą dla metody GET jest metoda POST. Ta metoda pakuje pary nazwa / wartość wewnątrz ciała żądania HTTP, co powoduje czystszy adres URL i nie nakłada ograniczeń rozmiaru na wyjście formularzy. Jest również bardziej bezpieczny.

 82
Author: IAdapter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-19 07:55:52

Najlepsza odpowiedź była pierwsza.

Używasz:

  • GET Gdy chcesz pobrać dane (GET DATA).
  • POST Gdy chcesz wysłać dane (POST DATA).
 39
Author: alex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-04 06:10:51

Istnieją dwa wspólne implikacje "bezpieczeństwa" w używaniu GET. Ponieważ dane pojawiają się w ciągu adresu URL, możliwe, że ktoś zagląda przez ramię w pasek adresu/URL może być w stanie wyświetlić coś, czego nie powinien być wtajemniczony, na przykład plik cookie sesji, który może potencjalnie zostać użyty do przejęcia sesji. Pamiętajcie, że każdy ma aparaty fotograficzne.

Druga implikacja bezpieczeństwa GET ma związek z tym, że zmienne GET są logowane do dziennika dostępu większości serwerów WWW jako część adres URL żądania. W zależności od sytuacji, klimatu regulacyjnego i ogólnej wrażliwości danych może to potencjalnie budzić obawy.

Niektóre systemy klienckie / firewalle / IDS mogą marszczyć brwi na żądania GET zawierające nadmierną ilość danych i w związku z tym mogą dostarczać niewiarygodne wyniki.

POST obsługuje zaawansowane funkcje, takie jak obsługa wieloczęściowego wejścia binarnego używanego do przesyłania plików na serwery www.

POST wymaga nagłówka content-length, który może zwiększ złożoność konkretnej implementacji klienta aplikacji, ponieważ wielkość przesyłanych danych musi być znana z wyprzedzeniem, co uniemożliwia tworzenie żądania klienta w wyłącznie jednokrotnym trybie przyrostowym. Być może drobny problem dla tych, którzy zdecydują się nadużywać HTTP, używając go jako transportu RPC (Remote Procedure Call).

[7]}inni już wykonali dobrą robotę, zajmując się różnicami semantycznymi i" kiedy " częścią tego pytania.
 25
Author: Einstein,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-10-31 18:13:18

Używam GET, gdy pobieram informacje z a URL i POST, gdy wysyłam informacje do a URL.

 17
Author: Mark Biek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-02 21:23:11

Powinieneś użyć POST, jeśli jest dużo danych lub poufnych informacji(naprawdę wrażliwe rzeczy wymagają bezpiecznego połączenia).

Użyj GET, jeśli chcesz, aby ludzie mogli dodawać zakładki do twojej strony, ponieważ wszystkie dane są dołączone do zakładki.

Po prostu uważaj na osoby uderzające REFRESH metodą GET, ponieważ dane będą wysyłane ponownie za każdym razem bez ostrzeżenia użytkownika (POST czasami ostrzega użytkownika o ponownym wysłaniu danych).

 17
Author: Grant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-02 21:23:28

Ten Dokument W3C wyjaśnia użycie HTTP GET I POST.

Myślę, że to autorytatywne źródło.

Streszczenie (Sekcja 1.3 dokumentu):

  • Użyj GET , jeśli interakcja jest bardziej podobna do pytania(tzn. jest to bezpieczna operacja, taka jak zapytanie, operacja odczytu lub wyszukiwanie).
  • Użyj POST jeśli:
    • interakcja jest bardziej jak rozkaz, lub
    • interakcja zmienia stan zasobów w sposób, który użytkownik odbierze (np. subskrypcję usługi) lub
    • użytkownik ponosi odpowiedzialność za wyniki interakcji.
 14
Author: chus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-18 15:09:03

Metody Get I Post nie mają nic wspólnego z technologią serwera, której używasz, działa to samo w php, asp.net albo ruby. GET I POST są częścią protokołu HTTP. Jak zauważył mark, Poczta jest bezpieczniejsza. Formularze pocztowe również nie są buforowane przez przeglądarkę. POST służy również do przesyłania dużych ilości danych.

 10
Author: sarsnake,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-02 21:21:21

Powód używania postu przy wprowadzaniu zmian w danych:

    [3]} akcelerator sieci Web, taki jak Google Web Accelerator, kliknie wszystkie (GET) linki na stronie i je buforuje. Jest to bardzo złe, jeśli linki wprowadzają zmiany do rzeczy.
  • Pamięć podręczna przeglądarki pobiera żądania, więc nawet jeśli użytkownik kliknie link, może nie wysłać żądania do serwera w celu wykonania zmiany.
  • aby chronić swoją stronę / aplikację przed CSRF musisz użyć POST. Aby całkowicie zabezpieczyć swoją aplikację, musisz również Wygeneruj unikalny identyfikator na serwerze i wyślij go wraz z żądaniem.

Nie umieszczaj również poufnych informacji w łańcuchu zapytania (tylko opcja z GET), ponieważ pojawiają się one na pasku adresu, zakładkach i dziennikach serwera.

Miejmy nadzieję, że to wyjaśnia, dlaczego ludzie mówią, że POST jest "bezpieczny". Jeśli przesyłasz poufne dane, musisz użyć protokołu SSL.

 9
Author: Sarel Botha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-03 18:47:17

GET i POST są metodami HTTP, które mogą osiągnąć podobne cele

GET GET nie powinny mieć ciała, więc oprócz plików cookie, jedynym miejscem do przekazywania informacji jest adres URL, a adresy URL są ograniczone w długości, GET jest mniej bezpieczny w porównaniu do POST, ponieważ dane wysyłane są częścią adresu URL

Nigdy nie używaj GET podczas wysyłania haseł, kart kredytowych lub innych poufnych informacji!, Dane są widoczne dla wszystkich w adresie URL, Mogą być buforowane dane . GET jest nieszkodliwy podczas przeładowywania lub wywoływania przycisku back, będzie oznaczony książką, parametry pozostają w historii przeglądarki, dozwolone są tylko znaki ASCII.

POST może obejmować wszystko, jak przechowywanie lub aktualizowanie danych, Zamawianie produktu lub wysyłanie wiadomości e-mail. POST metoda ma ciało.

POST metoda jest zabezpieczona do przekazywania poufnych i poufnych informacji do serwera nie będzie widoczna w parametrach zapytania w adresie URL i parametry NIE są zapisywane w historia przeglądarki. Nie ma ograniczeń co do długości danych. Podczas przeładowywania przeglądarka powinna ostrzec użytkownika, że dane mają być ponownie przesłane. POST metoda nie może być zakładkowa

 8
Author: user3540599,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-02 00:06:46
  1. Metoda GET jest używana do wysyłania mniej wrażliwych danych, podczas gdy metoda POST jest używana do wysyłania wrażliwych danych.
  2. używając metody POST można wysłać dużą ilość danych w porównaniu do metody GET.
  3. Dane wysyłane metodą GET są widoczne w pasku nagłówka przeglądarki, podczas gdy dane wysyłane metodą POST są niewidoczne.
 3
Author: Honey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-01 19:48:00

Wszystkie lub być może większość odpowiedzi w tym pytaniu i w Inne pytania dotyczące SO odnoszące się do GET i POST są błędne. Są poprawne technicznie i poprawnie wyjaśniają standardy, ale w praktyce jest zupełnie inaczej. Pozwól mi wyjaśnić:

GET jest uważany za idempotent , ale nie musi być. Parametry w GET można przekazać skryptowi serwera, który wprowadza stałe zmiany w danych. Odwrotnie, POST uważa się Nie idempotentne, ale można POST skrypt, który nie wprowadza żadnych zmian na serwerze. Jest to więc fałszywa dychotomia i nieistotna w praktyce.

Ponadto błędem jest stwierdzenie, że GET nie może nic zaszkodzić, jeśli przeładowany - oczywiście, że może, jeśli skrypt, który wywołuje i parametry, które przekazuje, dokonuje trwałej zmiany (np. usuwa dane dla przykładów). I tak może POST!

Teraz wiemy, że POST jest (zdecydowanie) bezpieczniejsze, ponieważ nie ujawnia parametrów jest przekazywana i nie jest buforowana. Dodatkowo możesz przekazać więcej danych i GET czysty, nie mylący adres URL. I robi wszystko, co GET może zrobić. Więc jest po prostu lepiej. Przynajmniej w produkcji.

Więc w praktyce, kiedy należy stosować GET vs. POST? Używam GET podczas tworzenia, więc mogę zobaczyć i dostosować parametry, które mijam. Używam go do szybkiego wypróbowania różnych wartości (na przykład do testowania warunków) lub nawet różnych parametrów. Mogę to zrobić bez konieczności budowania formularza i muszę go zmodyfikować, jeśli potrzebuję innego zestawu parametrów. Po prostu edytuję adres URL w przeglądarce w razie potrzeby.

Po zakończeniu rozwoju, lub przynajmniej stabilnym, zamieniam wszystko na POST.

Jeśli możesz wymyślić jakiś techniczny powód, że jest to nieprawidłowe, byłbym bardzo szczęśliwy, aby dowiedzieć się.

 3
Author: Chiwda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-19 16:29:33

Użyj metody GET, jeśli chcesz pobrać zasoby z adresu URL. Zawsze możesz zobaczyć ostatnią stronę, jeśli naciśniesz przycisk Wstecz w przeglądarce, i może to być zakładka, więc nie jest tak bezpieczna jak metoda POST.

Użyj metody POST, jeśli chcesz "przesłać" coś do adresu URL. Na przykład chcesz utworzyć konto google i być może będziesz musiał wypełnić wszystkie szczegółowe informacje, a następnie nacisnąć przycisk "Wyślij" (metoda POST jest wywoływana tutaj), po pomyślnym przesłaniu i spróbuj uderzyć przycisk Wstecz przeglądarki, pojawi się błąd lub nowy pusty formularz, zamiast ostatniej strony z wypełnionym formularzem.

 0
Author: RobotCharlie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-06 18:44:06

Metoda GET:

  • Służy tylko do wysłania 256 znaków daty

  • Podczas korzystania z tej metody, informacje można zobaczyć w przeglądarce

  • Jest to domyślna metoda używana przez formularze

  • Nie jest tak zabezpieczona.


Metoda POST:

  • Służy do wysyłania nieograniczonych danych.

  • Dzięki tej metodzie informacje nie mogą być widoczne na przeglądarka

  • Możesz wyraźnie wspomnieć o metodzie POST

  • Jest bardziej zabezpieczony niż metoda GET

  • Zapewnia bardziej zaawansowane funkcje

 -10
Author: Sidharam Anache,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-30 07:18:59