web-dev-qa-db-fra.com

GET vs POST in Ajax

Quelle est la différence entre GET et POST for Ajax = demandes?

Je ne vois aucune différence entre ces deux, sauf que lorsque j'utilise GET , les paramètres sont envoyés en URL, ce qui pour moi ne fait pas vraiment aucune différence, car toutes les demandes sont faites en arrière-plan et l'utilisateur ne trouve aucune différence.

edit: Quelles sont les méthodes PUT et DELETE utilisées?

72
Jakub Arnold

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 demande GET ne doit jamais entraîner la suppression de données d'une application. Si vous avez un lien sur lequel vous pouvez cliquer avec un GET pour supprimer des données, alors Google araignée votre site pourrait cliquer sur tous vos liens "Supprimer".

La réponse canonique peut être trouvée ici , qui cite la spécification HTML 2.0:

Si le traitement d'un formulaire est idempotent (c'est-à-dire qu'il n'a pas d'effet observable durable sur l'état du monde), alors la méthode du formulaire doit être GET. De nombreuses recherches dans les bases de données n'ont aucun effet secondaire visible et constituent des applications idéales des formulaires de requête.

Si le service associé au traitement d'un formulaire a des effets secondaires (par exemple, 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 prise en charge par votre serveur. 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 or PUT" (Create)/GET (Read)/PUT (Update)/DELETE (Delete).

131
crb

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

Les demandes GET ont une limite à la quantité de données pouvant être envoyées. J'oublie le nombre exact, mais cela peut poser des problèmes si vous envoyez quelque chose de substantiel.

Fondamentalement, la différence entre GET et POST est que dans une demande 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.

24
Ryan Smith

Que son AJAX ou non n'a pas d'importance. Il s'agit de l'action que vous prenez. Je recommande de suivre les principes de RESTE . Qui ont d'autres dispositions pour la mise à jour, la suppression, etc ...

19
Brian

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

4
Sergey

De nombreux serveurs Web limitent la longueur des données pouvant être transmises dans le cadre de l'URL, de sorte que la demande GET peut se briser de manière étrange et difficile à déboguer.

En outre, 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 demande GET, cela sera très probablement écrit sur le disque en texte clair.

Du point de vue REST, les demandes GET ne devraient pas avoir d'effets secondaires - elles ne devraient pas modifier les données. Donc, si vous OBTENEZ simplement une ressource par ID, cela a du sens, mais si vous effectuez des modifications sur une ressource, vous devez utiliser PUT, POST ou UPDATE pour le verbe http.

3
Don Werve

Les deux sont utilisés pour envoyer des données et recevoir une réponse en utilisant ces données.

OBTENIR: obtenir une banque d'informations sur le serveur. C'est à dire. Recherche, Tweet, Informations sur la personne. Si vous souhaitez envoyer des informations, obtenez la demande envoyer la demande en utilisant process.php? Name = subroto Donc, il envoie essentiellement des informations via l'URL. L'URL ne peut pas gérer plus de 2083 caractères. Donc, pour le billet de blog, vous souvenez-vous que ce n'est pas possible?

POST: Post fait la même chose que get. Inscription utilisateur, connexion utilisateur, envoi de données volumineuses, article de blog. Si vous devez 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 fonctionnalités qui sont des sous-ensembles de $ .ajax (). Il a beaucoup de configuration.

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

Sommaire:

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

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

Mais le problème est que certains navigateurs mettent en cache les résultats de GET. J'ai eu des problèmes avec les requêtes AJAX dans IE7, mais j'ai finalement découvert que le navigateur mettait en cache les résultats GET. 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 l'ai pas préféré)

1
trante

À propos de moi, je préfère POST. Je réserve l'accès aux événements dont je sais que la valeur envoyée est limitée aux données dont j'ai le "contrôle", par exemple, pour récupérer un élément avec un identifiant. Exemple, "getitem? Id = 123", "deleteImtem? Id = 123", ... Pour les autres cas, lorsque j'ai un formulaire à remplir par un utilisateur, je préfère POST.

Comme Ryan Smith l'a dit, il vaut mieux utiliser POST pour envoyer une grande quantité de données, et moins de soucis en cas d'utilisation dans d'autres langues/caractères spéciaux (généralement toutes les majeures du framework javascript devraient ' nt avoir aucun problème pour y faire face mais je pense que c'est moins d'histoires à utiliser POST).

Pour la perspective REST, à mon avis, vous pouvez l'utiliser avec un nouveau projet (pour garder une cohérence avec l'ensemble du projet).

Enfin, peut être certains programmes utilisés dans un réseau (URL loguers (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 . Certains afficheront 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, ce sont les changements d'un projet à un autre! ;)

1
user86830

La différence est la même entre GET et POST que vous utilisiez Ajax, HTML forms ou curl. Voici les définitions pertinentes:

0
Hank Gay