IT-Swarm.Net

Ποια είναι η διαφορά μεταξύ τουPOST και του GET;

Πρόσφατα έχω εμπλακεί με την PHP/AJAX/jQuery και μου φαίνεται ότι ένα σημαντικό μέρος αυτών των τεχνολογιών είναι εκείνο του POST και GET.

Πρώτον, ποια είναι η διαφορά μεταξύ POST και GET; Μέσω του πειραματισμού, γνωρίζω ότι το GET προσδίδει τις μεταβλητές επιστροφής και τις τιμές τους στη συμβολοσειρά διευθύνσεων URL

website.com/directory/index.php?name=YourName&bday=YourBday

αλλά POST δεν το κάνει.

Έτσι, είναι αυτή η μόνη διαφορά ή υπάρχουν συγκεκριμένοι κανόνες ή συμβάσεις για τη χρήση του ενός ή του άλλου;

Δεύτερον, έχω δει POST και GET εκτός PHP: επίσης στο AJAXκαι το jQuery. Πώς POST και GET διαφέρουν μεταξύ αυτών των 3; Είναι η ίδια ιδέα, η ίδια λειτουργικότητα, απλώς χρησιμοποιείται διαφορετικά;

359
Hristo

Μια POST, σε αντίθεση με μια GET, τυπικά έχει σχετικές πληροφορίες στο σώμα του αιτήματος. (Το A GET δεν θα πρέπει να έχει σώμα, εκτός από τα cookies, το μόνο μέρος για να περάσει πληροφορίες είναι στη διεύθυνση URL.) Εκτός από τη διατήρηση της σχετικής διεύθυνσης URL καθαρότερα, το POST σάς επιτρέπει επίσης να στείλετε περισσότερες πληροφορίες (όπως οι URL είναι περιορισμένες σε μήκος, (για παράδειγμα, δεν μπορείτε να χρησιμοποιήσετε GET - πρέπει να χρησιμοποιήσετε το POST συν ένα ειδικό τύπο/κωδικοποίηση περιεχομένου).

Εκτός από αυτό, ένα POST δηλώνει ότι το αίτημα θα αλλάξει κάτι, και δεν θα πρέπει να επαναληφθεί willy-nilly. Γι 'αυτό μερικές φορές βλέπετε το πρόγραμμα περιήγησής σας να σας ρωτάει εάν θέλετε να υποβάλετε ξανά τα δεδομένα φόρμας όταν πατήσετε το κουμπί "πίσω".

GET, από την άλλη πλευρά, πρέπει να είναι idempotent - που σημαίνει ότι θα μπορούσατε να το κάνετε ένα εκατομμύριο φορές και ο διακομιστής θα κάνει το ίδιο πράγμα (και θα δείξει ουσιαστικά το ίδιο αποτέλεσμα) κάθε φορά.

87
cHao

Αν και δεν είναι περιγραφή των διαφορών, παρακάτω είναι μερικά πράγματα που πρέπει να σκεφτούμε όταν επιλέγουμε τη σωστή μέθοδο.

  • Οι αιτήσεις GET μπορούν να αποθηκευτούν προσωρινά από το πρόγραμμα περιήγησης, κάτι που μπορεί να είναι πρόβλημα (ή όφελος) όταν χρησιμοποιείτε ajax.
  • Οι αιτήσεις GET εκθέτουν παραμέτρους στους χρήστες (το POST κάνει επίσης αλλά είναι λιγότερο ορατό).
  • Το POST μπορεί να περάσει πολύ περισσότερες πληροφορίες στο διακομιστή και μπορεί να έχει σχεδόν οποιοδήποτε μήκος.
29
Alex

Τα POST και GET είναι δύο μέθοδοι αίτησης HTTP . Το GET συνήθως αποσκοπεί στην ανάκτηση ορισμένων δεδομένων και αναμένεται να είναι idempotent (η επανάληψη του ερωτήματος δεν έχει παρενέργειες) και μπορεί να αποστείλει περιορισμένες ποσότητες δεδομένων παραμέτρων στο διακομιστή. Τα αιτήματα GET συχνά αποθηκεύονται προσωρινά από ορισμένα προγράμματα περιήγησης αν δεν είστε προσεκτικοί.

Το POST προορίζεται για την αλλαγή της κατάστασης του διακομιστή. Μεταφέρει περισσότερα δεδομένα και η επανάληψη του ερωτήματος επιτρέπεται (και συχνά αναμένεται) να έχει παρενέργειες, όπως τη δημιουργία δύο μηνυμάτων αντί για ένα.

17
Victor Nicollet

Εάν εργάζεστε RESTfully , το GET θα πρέπει να χρησιμοποιείται για αιτήματα όπου παίρνετε μόνο δεδομένα, και POST θα πρέπει να χρησιμοποιείται για αιτήσεις όπου κάνετε κάτι να συμβεί.

Μερικά παραδείγματα:

  • ΠΡΑΓΜΑΤΟΠΟΙΗΣΕΤΕ τη σελίδα που παρουσιάζει μια συγκεκριμένη ερώτηση SO

  • POST ένα σχόλιο

  • Στείλτε ένα αίτημα POST κάνοντας κλικ στο κουμπί "Προσθήκη στο καλάθι".

13
Skilldrick

Με το POST μπορείτε επίσης να κάνετε πολλαπλή κωδικοποίηση μιμού που σημαίνει ότι μπορείτε να επισυνάψετε αρχεία επίσης. Επίσης, εάν χρησιμοποιείτε μεταβλητές μετά την πλοήγηση σε σελίδες, ο χρήστης θα πάρει μια προειδοποίηση που θα ρωτά εάν θέλει να ξαναδώσει την παραμετρική παράμετρο. Συνήθως φαίνονται το ίδιο σε ένα αίτημα HTTP, αλλά θα πρέπει απλώς να παραμείνετε στο POST αν χρειαστεί να "POST" κάτι σε ένα διακομιστή και "GET" αν χρειαστεί να πάρετε κάτι από ένα διακομιστή, όπως αυτός είναι ο τρόπος προορίζονταν.

6
Matt Williamson

Η μόνη "μεγάλη" διαφορά ανάμεσα στο POST & GET (όταν τα χρησιμοποιείτε με AJAX) είναι δεδομένου ότι η διεύθυνση URL GET παρέχεται, είναι περιορισμένη σε μήκος (δεδομένου ότι η διεύθυνση URL δεν είναι άπειρη σε μήκος).

1
Activist