Quels sont les avantages d'utiliser une requête GET par rapport à une requête POST?
plusieurs de mes applications ajax dans le passé ont utilisé GET request mais maintenant je commence à utiliser POST request à la place. Les requêtes POST semblent être légèrement plus sécurisées et certainement plus conviviale url / jolie. Par conséquent, je me demande s'il y a une raison pour laquelle je devrais utiliser la requête GET du tout.
7 réponses
je pose généralement la question comme suit: quelque chose d'important change-t-il après la requête? (sans préjudice des opérations de journalisation et des opérations analogues). Si c'est le cas, ce devrait être une requête POST, si ce n'est pas le cas, ce devrait être une requête GET.
je suis content que vous appeliez les requêtes POST "légèrement" plus sécurisées, parce que c'est à peu près ce qu'elles sont; c'est trivial de simuler une requête POST par un utilisateur sur une page. Toutefois, le fait d'en faire une requête POST empêche les accélérateurs ou les recharges web re-déclenchement de l'action accidentellement.
en tant QU'AJAX, il y a une autre considération: si vous retournez JSON avec le support de callback, faites très attention à ne pas mettre de données sensibles que vous ne voulez pas que d'autres sites Web puissent y voir. Wikipedia avait une vulnérabilité dans ce sens où le jeton anti-CSRF de l'utilisateur était révélé via leur API JSON.
Vous devez utiliser d'arriver là où vous êtes en train de faire une demande qui n'a pas d'effets secondaires, par exemple, que de récupérer des infos. Cette requête peut:
- Être répétés sans problème - si le navigateur détecte une erreur, il peut en silence réessayer
- avoir son résultat caché par le navigateur
- Être mis en cache par un proxy
Ces choses sont toutes bonnes. Tout ce qui ne fait que récupérer des données (en particulier des données publiques) devrait vraiment être un GET. Le serveur doit envoyer sensible Last-Modified: et Expires: en-têtes pour autoriser la mise en cache si nécessaire.
Tous les bons points, cependant, en réponse à la question, les demandes sont de plus en plus utile dans certains cas de figure sur le courrier de demande:
- ils peuvent être signalisés
- Ils peuvent être mis en cache
- Ils sont plus rapides
- ils ont des conséquences connues (en supposant qu'ils ne changent pas les données), donc les visiter plusieurs fois temps n'est pas un problème.
pour le bien de la postérité, mise à jour de ce commentaire avec les notes de blog re: point #3 ici, tous crédit à Omar AL Zabir (l'auteur de la référence blog):
"Atlas par défaut rend HTTP POST pour tous les appels AJAX. Http POST is Plus cher que Http GET. Il transmet plus d'octets sur le fil, ainsi, prendre le temps précieux de réseau et il fait aussi ASP.NET faire des extras le traitement sur la fin du serveur. Donc, vous devriez utiliser Http Get autant que possible. Cependant, Http Get ne vous permet pas de passer des objets comme paramètre. Vous pouvez passer numérique, chaîne et date seulement. Quand vous faites un appel Http Get, Atlas construit une url encodée et fait un hit à cela URL. Donc, vous ne devez pas passer trop de contenu qui rend l'url devenir supérieure à 2 048 caractères. Pour autant que je sache, c'est ça le max longueur de n'importe quelle url.
une autre chose maléfique à propos de http post est, il s'agit en fait de 2 appels. Premier le navigateur envoie les en-têtes http post et les réponses du serveur avec " HTTP 100 Continuer." Lorsque le navigateur reçoit cela, il envoie les corps."
il y a une autre différence qui n'est mentionnée par personne.
les requêtes GET sont passées dans la chaîne D'URL et sont donc soumises à une limite de longueur généralement dépendante du navigateur.
les requêtes POST peuvent être beaucoup plus importantes - en fait pas vraiment limitées. Donc, si vous avez besoin de demander des données à partir d'un serveur web et que vous transmettez beaucoup d'informations sur les paramètres, alors une requête POST pourrait être la seule option.
donc, comme mentionné avant vraiment un GET la requête est pour demander des données (pas d'effets secondaires) alors qu'une requête POST est généralement utilisé pour transmettre des données de nouveau au serveur pour être stocké (avec des effets secondaires). par exemple, utilisez POST pour télécharger un fichier. GET pour récupérer un fichier.
il fut un temps où IE je crois avait une chaîne D'URL GET très courte. Certaines applications comme Lotus notes utilisent un grand nombre de caractères aléatoires pour représenter les identificateurs de document. J'ai eu le mécontentement d'utiliser un autre produit qui a généré des chaînes aléatoires de sorte que le L'URL de la page était unique à chaque fois. La corde aléatoire était énorme... et ça n'a pas toujours marché avec IE6 de mémoire.
les requêtes POST sont aussi peu sûres que GETs. La principale différence est que POST est utilisé pour modifier l'état de l'application serveur, alors que GET ne demande des données à partir de celui-ci.
la différence est importante lorsque vous utilisez des URL propres, "restful", où L'URL elle-même spécifie la ressource, et les différentes méthodes déclenchent différentes actions du côté du serveur.
ce qui est peut-être le plus important, GET est enregistrable / affichable dans l'historique des url, et consultable avec Google.
POST est important où vous n'avez pas voulez l'événement à être bookmarkable ou capable d'être saisi en tant qu'URL - sinon vous (ou Google crawling vos URLS) pourrait finir par faire accidentellement des choses comme supprimer des utilisateurs de votre système, par exemple.