2009-04-03 8 views
67

Quelle est la différence entre GET et POST pour Ajax demandes? Je ne vois pas de différence entre les deux, sauf que lorsque j'utilise GET, les paramètres sont envoyés en URL, ce qui ne me semble pas vraiment important puisque toutes les demandes sont faites en arrière-plan et l'utilisateur ne trouve aucune différence.GET vs POST à ​​Ajax

modifier: Quels sont PORTER et SUPPRIMER méthodes utilisées pour?

+7

BTW, il y a aussi PUT et DELETE demandes en plus de demandes POST. Vous devriez poser des questions sur ceux-ci, aussi. –

+1

Pour les futurs lecteurs: voici une [question connexe par Fooker il y a un an] (http://stackoverflow.com/q/18395523/4043409). – Gideon

Répondre

129

GET est conçu pour obtenir des données du serveur. POST (et les amis moins connus PUT et DELETE) sont conçus pour modifier les données sur le serveur.

Une requête GET ne doit jamais entraîner la suppression des données d'une application. Si vous avez un lien, vous pouvez cliquer sur un GET pour supprimer des données, puis Google spidering votre site pourrait cliquer sur tous vos liens "Supprimer".

La réponse canonique se trouve here, qui cite la spécification HTML 2.0:

Si le traitement d'une forme est idempotent (il n'a pas durable effet observable sur l'état du monde ) , alors la méthode de formulaire doit être GET. Beaucoup de recherches dans les bases de données n'ont aucun effets secondaires visibles et rendent idéales les applications des formulaires de requête.

Si le service associé au traitement d'une forme a des effets secondaires (par exemple, la modification d'une base de données ou abonnement à un service ), la méthode doit être POST.

Dans votre appel AJAX, vous devez utiliser la méthode que votre serveur prend en charge. Vous devez toujours concevoir votre serveur de sorte que les opérations qui modifient les données soient appelées par POST/PUT/DELETE. D'autres commentaires ont des liens vers REST, qui mappe généralement C/R/U/D à "POST ou PUT" (Créer)/GET (Lire)/PUT (Mise à jour)/SUPPRIMER (Supprimer).

+6

+1: Définition essentielle de GET - idempotency. Toutes les modifications doivent avoir lieu avec POST, PUT et DELETE. –

+0

mon serveur donne erreur 403 si je soumets le formulaire en utilisant post, get fonctionne. Je pense que cela est dû à la configuration du serveur. Je n'ai aucun accès au serveur. Comment le contourner? –

+0

Je suis d'accord avec @ S.Lott. Totalement belle et complète définition de la méthode GET./clap mate. –

24

Si vous envoyez de grandes quantités de données ou des données sensibles via HTTPS, vous devez utiliser POST. Si c'est juste un paramètre simple, j'utiliserais GET.

Les requêtes GET ont une limite à la quantité de données pouvant être envoyées. J'oublie le nombre exact, mais cela peut causer des problèmes si vous envoyez quelque chose de substantiel. Fondamentalement, la différence entre GET et POST est que dans une requête GET, les paramètres sont passés dans l'URL où, comme dans un POST, les paramètres sont inclus dans le corps du message.

+2

Oui, il est important de souligner qu'il existe des limitations de taille associées à GET et qu'elles sont différentes en fonction du logiciel client et serveur. –

19

Qu'il soit AJAX ou non est sans importance. C'est à propos de l'action que vous prenez. Je recommande de suivre les principes de REST. Qui ont d'autres dispositions pour la mise à jour, la suppression, etc ...

+3

+1: Les principes de RESTful sont essentiels. –

3

De nombreux serveurs web limitent la longueur des données qui peuvent être transmises dans le cadre de l'URL, de sorte que la requête GET peut se rompre de manière étrange qui est difficile à déboguer .De plus, la plupart des logiciels serveur enregistrent les URL dans les journaux d'accès, donc si vous transmettez des informations sensibles (telles que des mots de passe) dans une requête GET, elles seront probablement écrites sur le disque en clair. D'un point de vue REST, les requêtes GET ne devraient avoir aucun effet secondaire - elles ne devraient pas modifier les données. Donc, si vous obtenez simplement une ressource par ID, cela est logique, mais si vous validez une ressource, vous devriez utiliser PUT, POST ou UPDATE pour le verbe http.

-2

Si vous transmettez des arguments avec des caractères qui peuvent être foirés dans l'URL (tels que des espaces), vous utilisez POST. Sinon, vous pouvez utiliser GET.

Généralement, si vous transmettez juste quelques petits arguments, vous utiliserez GET. Mais pour transmettre des informations soumises par l'utilisateur, telles que des entrées de blog, du texte, etc., il est recommandé d'utiliser POST.

Il y a aussi certains cadres qui reposent entièrement sur urls à base de segments (comme site.com/products/133 plutôt que site.com/products.php?id=333 et ces cadres UNSET les variables GET pour la sécurité. Dans ce cas, vous devez utiliser POST allt le temps.

0

La différence est le même entre GET et POST si vous utilisez Ajax, HTML form s, ou curl Voici les définitions pertinentes:.

1

À mon propos, je préfère POST. Je réserve d'obtenir les événements que je sais que la valeur envoyée est limitée aux données que j'ai le "contrôle", par exemple, pour récupérer un élément avec un ID. Exemple, "getitem? Id = 123", "deleteImtem? Id = 123", ... Pour les autres cas, quand j'ai un formulaire remplissable par un utilisateur, je préfère POST. Comme Ryan Smith l'a dit, il est préférable d'utiliser POST pour envoyer une grande quantité de données, et moins de wories en cas d'utilisation dans d'autres langues/chars spéciaux (en général, tous les frameworks majors javascript ne devraient pas avoir de problèmes faire face à cela mais je pense qu'il est moins de wories à utiliser POST). Pour la perspective REST, à mon avis, vous pouvez utiliser ceci avec un nouveau projet (pour garder une cohérence avec l'ensemble du projet). Enfin, maybee certains programmes utilisés dans un réseau (loggers URL (ie: pour voir si les employés ont perdu leur temps sur des sites non-autorisés, ...) proxys, ...) ou tout autre type d'outil peut intercepter la requête. Somes montrera dans les rapports les paramètres que vous avez envoyés avec GET, le considérant comme une page web différente. Mais dans cette situation, ce n'est peut-être pas votre problème, c'est le passage d'un projet à un autre! ;)

4

Les requêtes GET sont plus faciles à exploiter dans les attaques CSRF (cross site request forgery). A savoir que les fausses requêtes POST nécessitent que Javascript soit activé côté utilisateur, alors que les fausses requêtes GET sont encore possibles avec les balises de script img.

0

D'abord, des informations générales. Utilisez GET si vous ne lisez que les données, utilisez POST si vous changez quelque chose sur la base de données, fichiers txt etc.

Mais le problème est, certains navigateurs cache GET résultats. J'ai eu des problèmes avec les demandes AJAX dans IE7, mais j'ai enfin découvert que le navigateur met en cache GET résultats.J'ai repensé le flux et change ma demande en POST. Donc, n'utilisez pas GET si vous ne voulez pas de mise en cache.

(Bien sûr, vous pouvez désactiver la mise en cache dans les opérations GET. Mais je ne préférerais)

2

Les deux sont utilisés pour envoyer des données et recevoir une réponse à l'aide de ces données.

GET: Récupère des informations dans le serveur. C'est à dire. Recherche, tweet, informations sur la personne. Si vous voulez envoyer des informations, alors envoyez une requête en utilisant process.php? Name = subroto Donc, il envoie des informations via l'url. Url ne peut pas gérer plus de 2083 caractères. Donc, pour l'article de blog, vous souvenez-vous que ce n'est pas possible?

POST: Post faire la même chose que d'obtenir. Enregistrement de l'utilisateur, connexion de l'utilisateur, envoi de données volumineuses, blog. Si vous avez besoin d'envoyer des informations sécurisées, utilisez post ou pour les mégadonnées car elles ne passent pas par l'URL. AJAX: $ .get() et $ .post() contiennent des fonctions qui sont des sous-ensembles de $ .ajax(). Il a beaucoup de configuration.

$ Méthode .get(), qui est une sorte de raccourci pour $ .Ajax(). Lorsque vous utilisez $ .get(), au lieu de passer dans un objet, vous passez des arguments. Au minimum, vous aurez besoin des deux premiers arguments, qui sont l'URL du fichier que vous voulez récupérer (c'est-à-dire 'test.txt') et un callback réussi.

Résumé:

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