2009-04-03 15 views
67

Jaka jest różnica między GET i POST dla Ajax wniosków?GET vs POST w Ajax

Nie widzę żadnej różnicy między tymi dwoma, z wyjątkiem, że gdy używam GET, parametry są wysyłać w URL, które dla mnie tak naprawdę nie robi żadnej różnicy, ponieważ wszystkie wnioski są wykonywane w tle i użytkownik nie znajduje żadnej różnicy.

edit: Jakie są PUT i DELETE metod służy?

+7

BTW, istnieją również PUT i DELETE żądania w uzupełnieniu do postu żądań. Powinieneś też zapytać o te. –

+1

Dla przyszłych czytelników: oto [pokrewne pytanie Fookera sprzed roku] (http://stackoverflow.com/q/18395523/4043409). – Gideon

Odpowiedz

129

GET jest przeznaczony do pobierania danych z serwera. POST (i mniej znanych znajomych PUT i DELETE) są przeznaczone do modyfikowania danych na serwerze.

Żądanie GET nigdy nie powinno powodować usunięcia danych z aplikacji. Jeśli masz link, który możesz kliknąć, aby usunąć dane, Google spidering Twojej strony może kliknąć wszystkie linki "Usuń".

Odpowiedź kanoniczne można znaleźć here, który cytuje HTML 2.0 specyfikacji:

Jeżeli przetwarzanie formularza jest idempotent (czyli nie ma trwałego zauważalnego wpływu na stan świata ) , a następnie metoda formularza powinna być GET. Wiele przeszukiwań bazy danych nie ma widocznych efektów ubocznych i sprawia, że ​​aplikacje formularzy zapytań są idealne.

Jeśli usługa związane z przetwarzaniem postaci ma skutki uboczne (na przykład modyfikacja bazy albo subskrypcja usługi ) metoda powinna być POST.

Podczas połączenia AJAX należy użyć dowolnej metody obsługiwanej przez serwer. Zawsze należy zaprojektować serwer, aby operacje modyfikujące dane były wywoływane przez POST/PUT/DELETE. Inne komentarze zawierają łącza do usługi REST, która ogólnie odwzorowuje C/R/U/D na "POST lub PUT" (Utwórz)/GET (Odczyt)/PUT (Aktualizuj)/USUŃ (Usuń).

+6

+1: Niezbędna definicja GET - idempotency. Wszystkie zmiany muszą się zdarzyć z POST, PUT i DELETE. –

+0

mój serwer daje błąd 403, jeśli przekażę formularz za pomocą postu, get działa. Myślę, że wynika to z konfiguracji serwera. Nie mam żadnego dostępu do serwera. Jak ominąć to? –

+0

Zgadzam się z @ S.Lott. Całkowicie dobra i kompletna definicja metody GET./Klaskaj mate. –

24

Jeśli wysyłasz duże ilości danych lub poufnych danych przez HTTPS, będziesz chciał użyć POST. Jeśli to tylko prosty parametr, używałbym GET.

Żądania GET mają limit ilości danych, które można wysłać. Zapomniałem dokładnej liczby, ale może to spowodować problemy, jeśli wysyłasz coś istotnego.

Zasadniczo różnica między GET i POST polega na tym, że w żądaniu GET parametry są przekazywane w adresie URL, tak jak w POST, parametry są zawarte w treści wiadomości.

+2

Tak, ważne jest wskazanie, że istnieją ograniczenia wielkości związane z GET i że różnią się one w zależności od oprogramowania klienta i serwera. –

19

Bez względu na to, czy jest to AJAX, czy nie, nie ma znaczenia. To o akcji, którą bierzesz. Polecam przestrzeganie zasad REST. Które mają dalsze postanowienia dotyczące aktualizowania, usuwania itp ...

+3

+1: RESTful zasady są niezbędne. –

3

Wiele serwerów internetowych ogranicza długość danych, które można przekazać jako część adresu URL, więc żądanie GET może pękać w nieparzysty sposób, który jest trudny do debugowania .

Ponadto, większość oprogramowania serwera rejestruje adresy URL w dziennikach dostępu, więc jeśli przekażesz poufne informacje (takie jak hasła) w żądaniu GET, będzie to najprawdopodobniej zapisane na dysku w postaci zwykłego tekstu.

Z perspektywy REST żądania GET nie powinny wywoływać skutków ubocznych - nie powinny modyfikować danych. Tak więc, jeśli pobierasz zasób według identyfikatora, ma to sens, ale jeśli zatwierdzasz zmiany w zasobie, powinieneś używać PUT, POST lub UPDATE dla czasownika http.

-2

Jeśli przekazujesz argumenty zawierające znaki, które mogą zostać pomieszane w adresie URL (np. Spacje), używaj POST. W przeciwnym razie możesz użyć GET.

Generalnie, jeśli podajesz tylko kilka drobnych argumentów, używałbyś GET. Ale do przekazywania informacji przesłanych przez użytkownika, takich jak wpisy na blogu, tekst, itp., Dobrą praktyką jest stosowanie testu POST.

Istnieją również pewne ramy, które opierają się całkowicie na segment oparty adresów URL (takie jak site.com/products/133 zamiast site.com/products.php?id=333 a te ramy unset zmiennych GET dla bezpieczeństwa. W takich przypadkach należy użyć POST allt czasu.

0

Różnica jest taka sama między GET i POST czy używasz Ajax, HTML form s lub curl Oto odnośne definicje:.

1

O mnie wolę POST. Zastrzegam sobie dostanie się do zdarzeń, które wiem, że wysłana wartość jest ograniczona do danych i mam "kontrolę", na przykład, aby odzyskać przedmiot z identyfikatorem. Przykład: "getitem? Id = 123", "deleteImtem? Id = 123", ... W innych przypadkach, gdy mam formularz do wypełnienia przez użytkownika, wolę POST.

Tak jak powiedział Ryan Smith, lepiej używać POST do wysyłania dużej ilości danych, a mniej w przypadku użycia w innych językach/specjalnych znakach (ogólnie wszystkie ramy języka javascript nie powinny mieć żadnych problemów radzę sobie z tym, ale myślę, że jest mniej wór używać POST).

Dla perspektywy REST, moim zdaniem, można użyć tego z nowym projektem (aby zachować spójność z całym projektem).

Wreszcie, maybee niektóre programy używane w sieci (logami URL (np .: aby sprawdzić, czy pracownicy stracili czas na stronach nieautoryzowanych, ...) proxy, ...) lub innego rodzaju narzędzie może przechwycić zapytanie. Somes pokaże w raportach parametry wysłane z GET, traktując je jak inną stronę internetową. Ale w tej sytuacji może nie być twoim problemem, to zmiany z projektu na inny! ;)

4

Żądania GET są łatwiejsze do wykorzystania w atakach CSRF (cross site request forery). Mianowicie fałszywe żądania POST wymagają włączenia Javascript po stronie użytkownika, podczas gdy fałszywe żądania GET są nadal możliwe tylko z img, znacznikami skryptu.

0

Po pierwsze, informacje ogólne. Użyj GET jeśli tylko do odczytu danych, należy użyć POST jeśli coś zmienić na bazie plików TXT itp

Ale problem jest, niektóre przeglądarki buforują GET wyników. Miałem problemy z żądaniami AJAX w IE7, ale w końcu dowiedziałem się, że przeglądarka buforuje wyniki GET.Ponownie przemyślałem przepływ i zmieniam moją prośbę na POST.

Więc nie używaj GET, jeśli nie chcesz buforować.

(Oczywiście można wyłączyć buforowanie w operacjach dostać. Ale nie wolą)

2

Oba są używane do wysyłania i odbierania danych pewne jakąś odpowiedź używając tych danych.

GET: Pobierz magazyn informacji na serwerze. To znaczy. Szukaj, tweet, Informacje o osobie. Jeśli chcesz przesłać informacje, a następnie uzyskać żądanie wysłania żądania za pomocą process.php? Name = subroto Więc w zasadzie wysłać informacje za pośrednictwem url. Url nie może obsłużyć więcej niż 2083 znaków. Więc na blogu możesz pamiętać, że nie jest to możliwe?

POST: Opublikuj to samo, co otrzymasz. Rejestracja użytkownika, logowanie użytkownika, wysyłanie dużych danych, wpis w blogu. Jeśli chcesz wysłać bezpieczne informacje, użyj postu lub dużych danych, ponieważ nie jest to adres URL.

AJAX: $ .get() i $ .post() zawierają funkcje będące podzbiorami $ .ajax(). Ma dużą konfigurację.

Metoda $ .get(), która jest rodzajem skrótu dla $ .Ajax(). Gdy używasz $ .get(), zamiast przekazywać obiekt, przekazujesz argumenty. Wymagane są co najmniej dwa pierwsze argumenty, które są adresem URL pliku, który chcesz pobrać (np. "Test.txt") i zwrotnym sukcesem.

Podsumowanie:

$.get(url [, data ] [, success ] [, dataType ]) 
$.post(url [, data ] [, success ] [, dataType ]) // for sending secure or Large information 
$.ajax(url [, settings ]) // More Configaration