web-dev-qa-db-fra.com

Pourquoi la méthode GET est plus rapide que POST en HTTP?

Je viens juste de découvrir la programmation Web et je suis simplement curieux de connaître les méthodes Get et Post d’envoi de données d’une page à une autre.

Il est dit que la méthode Get est plus rapide que Post, mais je ne sais pas pourquoi .une raison que j'ai pu trouver est que Get ne peut prendre que 255 caractères avec elle? Y a-t-il d'autres raisons, veuillez expliquer quelqu'un? moi?

39
Embedd_Khurja

Ce n'est pas une question de vitesse. Il existe de nombreux cas où POST est plus applicable. Par exemple, les moteurs de recherche indexeront les URL GET et les navigateurs pourront les marquer d'un signet et les afficher dans l'historique. Par conséquent, si vous effectuez des actions telles que la modification d'une base de données basée sur une requête GET, cela peut être dangereux car certains bots peuvent également traverser l'URL. 

L'autre cas peut être un problème de sécurité. Si vous publiez des informations d'identification à l'aide de GET, elles seront répertoriées dans l'historique du navigateur et les fichiers journaux du serveur.

42
Mehrdad Afshari

Une autre chose à propos de http post est qu'il peut s'agir de 2 appels lorsque l'en-tête http Expect: 100-Continue est utilisé. Le premier navigateur envoie les en-têtes de publication http et les réponses du serveur avec «HTTP 100 Continuer». Lorsque le navigateur reçoit cela, il envoie le corps réel.

http://omaralzabir.com/atlas_2__http_post_is_slower_and_it_s_default_in_atlas/

Je pense que c'est la réponse que l'auteur cherchait.

41
Kyle Nunery

Il existe plusieurs idées fausses sur GET et POST dans HTTP. Il y a une différence principale: GET doit être idempotent alors que POST ne doit pas l'être. Cela signifie que les GET ne génèrent aucun effet secondaire, c’est-à-dire que je peux envoyer un GET à une application Web autant de fois que je le souhaite (pensez à appuyer plusieurs fois sur Ctrl + R ou F5) et les requêtes seront «sûres».

Je ne peux pas faire cela avec le POST, un POST peut modifier les données sur le serveur. Par exemple, si je commande un élément sur le Web, celui-ci doit être ajouté avec un POST car l'état est modifié sur le serveur, le nombre d'éléments que j'ai ajoutés a été augmenté de 1. Si je l'ai fait avec un POST et cliquez sur Actualiser dans le navigateur. Le navigateur me prévient. Si je le fais avec un GET, le navigateur enverra simplement la demande.

Sur le serveur, GET vs POST est une pure convention, c’est-à-dire que c’est à moi, en tant que développeur, de veiller à coder le POST du serveur pour que pas répète l’appel. Il y a différentes façons de le faire mais c'est une autre question.

Pour répondre à la question si j'utilise GET ou POST pour effectuer la même tâche, il n'y a pas de différence de performances.

Vous pouvez lire le RFC ( http://www.w3.org/Protocols/rfc2616/rfc2616.html ) pour plus de détails. 

28
Kevin Jones

En regardant le protocole http, POST ou GET devrait être aussi facile et rapide à analyser. Je dirais qu'il n'y a pas de différence de performance. 

Regardez les en-têtes HTTP bruts

http GET

GET /index.html?userid=joe&password=guessme HTTP/1.1
Host: www.mysite.com
User-Agent: Mozilla/4.0

http POST

POST /login.jsp HTTP/1.1
Host: www.mysite.com
User-Agent: Mozilla/4.0
Content-Length: 27
Content-Type: application/x-www-form-urlencoded

userid=joe&password=guessme

De mon point de vue, les performances ne doivent pas être prises en compte lorsque l'on compare GET et POST.

9
Robert

Vous devez considérer GET comme "un endroit où aller" et POST comme "faire quelque chose". Par exemple, un formulaire de recherche doit être soumis à l'aide de GET car la page de résultat de la recherche est un "lieu" et l'utilisateur voudra le marquer d'un signet ou le récupérer ultérieurement de son historique. Si vous envoyez le formulaire à l'aide de POST, l'utilisateur ne peut recréer la page qu'en soumettant à nouveau le formulaire. D'autre part, si vous deviez exécuter une action telle que cliquer sur un bouton de suppression, vous ne voudriez pas la soumettre avec GET, car l'action serait répétée à chaque fois que l'utilisateur reviendrait à l'URL.

7
Tim Booker

Juste mes quelques centimes de 2016.

Je crée un système de messagerie simple. Au début, j'ai utilisé POST pour recevoir de nouvelles alertes. Dans jQuery j'avais:

$.post('/a/alerts', 'stamp=' + STAMP, function(result)
{
});

Et dans PHP, j'ai utilisé $ _POST ['stamp']. Même de localhost, j’ai eu 90-100 ms pour chaque requête de ce type ..__, j’ai simplement changé:

$.get('/a/alerts?stamp=' + STAMP, function(result)
{
});

et dans PHP, il est passé à $ _GET ['tampon']. Donc un peu moins de 1 minute de changements. Maintenant, chaque demande prend 30-40 ms .

So GET peut être deux fois plus rapide que POST . Bien sûr, pas toujours, mais pour de petites quantités de données, j'obtiens toujours les mêmes résultats.

6
Tom

GET est légèrement plus rapide car les valeurs sont envoyées dans le header contrairement au POST les valeurs sont envoyées dans la requête body, dans le format spécifié par le type de contenu.

Généralement, le type de contenu est application/x-www-form-urlencoded. Le corps de la requête utilise donc le même format que la chaîne de requête:

paramètre = valeur & aussi = autre Lorsque vous utilisez un fichier téléchargé dans le formulaire, vous utilisez plutôt le codage multipart/form-data, dont le format est différent. C'est plus compliqué.

2
Waqleh

Je suis d'accord avec d'autres réponses, mais il n'a pas été mentionné que les demandes GET peuvent être mises en cache alors que les demandes POST ne le sont jamais. Je pense que c’est la raison principale pour laquelle certaines requêtes GET sont exécutées plus rapidement .

Méthodes HTTP: GET vs. POST: http://www.w3schools.com/tags/ref_httpmethods.asp

1
AXO

POST augmentera vos en-têtes davantage, augmentant simplement la taille, mais la différence doit être vraiment négligeable, donc je ne vois pas pourquoi cela devrait être une préoccupation.

N'oubliez pas que la meilleure façon de parler HTTP est d'utiliser GET uniquement pour les actions et POST pour les données. Vous n'avez pas à le faire, mais vous ne voulez pas non plus avoir un cas où les robots Google peuvent, par exemple, insérer, supprimer ou manipuler des données qui étaient uniquement destinées à un humain à gérer simplement parce qu'elles suivent les liens trouvés .

0
Hans