Pourquoi la méthode GET est-elle plus rapide que POST dans HTTP?
Question
Je suis nouveau dans 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.
On dit que la méthode GET est plus rapide que POST mais je ne sais pas pourquoi. Une des raisons que j'ai pu trouver est que GET ne peut prendre que 255 caractères? Y a-t-il une autre raison? S'il vous plaît, quelqu'un m'explique.
La solution
Ce n’est pas une question de vitesse. Il existe de nombreux cas où le 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.
Autres conseils
Un autre aspect de la publication http 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 le reçoit, il envoie le corps actuel.
http://omaralzabir.com/atlas_2_http_pall_
Je pense que c'est la réponse que l'auteur recherchait.
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 POST, un POST peut modifier des 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é a été augmenté de 1. Si je l'ai fait avec un POST, cliquez sur Actualiser. dans le navigateur, le navigateur m’avertit, 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 sur le serveur pour ne pas répéter 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.
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.
Consultez 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
POST http
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.
Vous devriez penser à GET comme "un endroit où aller" et à POST comme "faisant 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 mettre en favori ou le récupérer de son historique à une date ultérieure. Si vous soumettez le formulaire à l'aide de POST, l'utilisateur ne peut recréer la page qu'en soumettant à nouveau le formulaire. Par contre, 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.
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 en PHP, j'ai utilisé $ _POST ['stamp']. Même de localhost, j’ai reçu 90-100 ms pour chaque requête de ce type. J'ai simplement changé:
$.get('/a/alerts?stamp=' + STAMP, function(result)
{
});
et en PHP sont passés à $ _GET ['stamp']. Donc un peu moins de 1 minute de changements. Désormais, chaque demande prend 30 à 40 ms .
Ainsi, 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.
GET est un peu plus rapide car les valeurs sont envoyées dans l'en-tête , contrairement à POST , les valeurs sont envoyées. dans la requête body , au 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 = un 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é.
Je suis d'accord avec les 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. (Bien entendu, cela signifie parfois qu'aucune demande n'est réellement envoyée. Par conséquent, ce n'est pas réellement la demande GET qui est plus rapide, mais le cache de votre navigateur.)
Méthodes HTTP: GET et POST: http://www.w3schools.com/tags/ ref_httpmethods.asp
POST augmentera vos en-têtes davantage, ce qui l’agrandira davantage, mais la différence doit être vraiment négligeable. Par conséquent, je ne vois pas pourquoi cela devrait poser problème.
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. .