2009-07-31 9 views
36

Je suis nouveau à la programmation web et je suis juste curieux de savoir comment utiliser les méthodes Get et Post pour envoyer des données d'une page à une autre.Pourquoi la méthode GET est plus rapide que POST dans HTTP?

Il est dit que la méthode Get est plus rapide que Post mais je ne sais pas pourquoi est-ce une raison que je pourrais trouver est que Get ne peut prendre que 255 caractères avec lui? Y at-il d'autres raisons, s'il vous plaît quelqu'un m'explique?

+9

Vous devez choisir GET vs POST selon que l'action a des effets secondaires ou des différences de performances perçues. – Draemon

Répondre

38

Ce n'est pas une question de vitesse. Il y a beaucoup de cas où POST est plus applicable. Par exemple, les moteurs de recherche indexeront les URL GET et les navigateurs pourront les marquer et les afficher dans l'historique. Par conséquent, si vous effectuez des actions telles que la modification d'une base de données en fonction d'une requête GET, cela peut être dangereux car certains robots 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 apparaîtront dans l'historique du navigateur et dans les fichiers journaux du serveur.

+0

comment ces méthodes fonctionnent est-il une sorte de sérialisation utilisée pour stocker des valeurs et désérialisation pour obtenir les données stockées. –

+1

Pour la soumission d'un formulaire simple, les deux reposent sur des paires de valeurs clés. GET incorpore celles-ci dans l'URL elle-même (chaîne de requête) et POST l'envoie dans le corps de la requête. –

+0

Ensuite, il y a des problèmes de longueur de l'URL. Même si vous faites une action qui pourrait autrement être un GET (comme une simple recherche de recherche), vous êtes limité par la longueur de ce qui est autorisé par GET et vous pourriez être forcé de choisir POST. – demongolem

9

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.

Jetez un oeil à les en-têtes HTTP premières

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, la performance ne doit pas être pris en compte lors comparer GET et POST.

+7

GET est moins de paquets que POST. Quels spectacles dans votre exemple. Toujours des paquets si moins puis plus rapide à traiter. Les paquets plus volumineux, même dans un seul octet, sont au moins quelque part en mémoire/cpu son implémentation supplémentaire. Donc, en comparant GET ou POST, je dirais en fonction de la taille des paquets GET sera plus rapide. – YumYumYum

+0

@YumYumYum +1. Dans mon GET applicated est 2x plus rapide que POST! –

0

POST augmentera davantage vos en-têtes, juste en les agrandissant, mais la différence devrait être vraiment négligeable, donc je ne vois pas pourquoi cela devrait être un problème. N'oubliez pas que la bonne façon de parler HTTP est d'utiliser GET uniquement pour les actions et POST pour les données. Vous n'avez pas besoin de le faire, mais vous ne voulez pas non plus que Google bots puisse, par exemple, insérer, supprimer ou manipuler des données qui n'étaient destinées qu'à un humain, simplement parce qu'il suit les liens qu'il trouve .

+0

Ce n'est pas entièrement vrai. Pour clarifier: GET est destiné à être idempotent et n'a généralement pas de corps. Le POST n'est pas nécessairement idempotent et a généralement un corps. Remarque, je dis que GET "généralement" n'a pas de corps car la spécification HTTP ne l'interdit pas (IIRC) mais la plupart des serveurs l'ignoreront probablement. – Tom

24

Il existe plusieurs fausses idées concernant GET et POST dans HTTP. Il y a une différence primaire, GET doit être idempotent alors que POST ne doit pas être. Cela signifie que les GET ne causent pas d'effets secondaires, c'est-à-dire que je peux envoyer un GET à une application web autant de fois que je le souhaite (penser Ctrl + R ou F5 plusieurs fois) et les requêtes seront 'safe'

Je ne peux pas faire cela avec POST, un POST peut changer les données sur le serveur. Par exemple, si je commande un article sur le Web, l'article 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 augmenté de 1. Si je l'ai fait avec un POST et un rafraîchissement 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 pure convention, c'est à moi en tant que développeur pour m'assurer que je code le POST sur le serveur à pas répéter l'appel. Il y a plusieurs façons de le faire, mais c'est une autre question.

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

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

+0

Merci pour votre suggestion que POST est utilisé de sorte que l'appel répété ne peut pas se produire sur le côté serveur. –

+0

Ce n'est pas ce qu'il a dit franc, l'article pourrait entraîner des changements, mais il n'y a pas de garantie après tout changement, cela pourrait simplement être parce que la publication des données est plus optimale que l'utilisation de l'url, il n'y a pas de règle obligatoire cet état change quelque chose –

7

Vous devriez penser à 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ésultats de recherche est un "lieu" et l'utilisateur voudra le mettre en signet ou l'extraire de son historique à une date ultérieure. Si vous soumettez le formulaire en utilisant POST, l'utilisateur ne peut recréer la page qu'en renvoyant le formulaire. D'un autre côté, si vous deviez effectuer une action telle que cliquer sur un bouton de suppression, vous ne voudriez pas l'envoyer avec GET, car l'action serait répétée chaque fois que l'utilisateur retournerait à l'URL.

39

Une autre chose à propos de la publication http est qu'il peut y avoir 2 appels lorsque l'en-tête http Expect: 100-Continue est utilisé. Le premier navigateur envoie les en-têtes de message http et les réponses du serveur avec "HTTP 100 Continue". 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 ceci est la réponse que l'auteur cherchait.

+1

Ceci est certainement la réponse que je cherchais. Merci! – nrodic

+0

les gars, ** êtes-vous sûr ** ??? Deux demandes ?? C'est un non-sens! https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods. Pour la méthode GET, les données n'ont pu être transférées que dans la partie 'query' de l'en-tête d'une requête. Pour les requêtes POST - les données sont transmises dans le corps de la requête et lorsque vous envoyez des données en utilisant 'Content-Type = application/x-www-form-urlencoded', les requêtes auront presque la même taille (dans la plupart des cas - POST est plus grand). Mais la différence est ** insignifiante **, moins de quelques millisecondes pour 10 000 requêtes ... – maxkoryukov

1

GET est légèrement plus rapide parce que les valeurs sont envoyées dans l'en-tête contrairement à la POST les valeurs sont envoyées dans la demande corps, dans le format que le type de contenu spécifie.

Habituellement, le type de contenu est application/x-www-form-urlencoded, de sorte que le corps de la requête utilise le même format que la chaîne de requête:

paramètre

= valeur & = aussi une autre Lorsque vous utilisez un téléchargement de fichier Dans le formulaire, vous utilisez plutôt l'encodage multipart/form-data, qui a un format différent. C'est plus compliqué.

1

Je suis d'accord avec les autres réponses, mais il n'a pas été mentionné que les requêtes GET peuvent être mises en cache alors que les requêtes POST ne sont jamais mises en cache. Je pense que c'est la principale raison pour laquelle certaines requêtes GET sont exécutées plus rapidement. (Of-gros, cela signifie que, parfois, aucune demande est effectivement envoyé Par conséquent, il est pas en fait la demande GET qui est plus rapide, mais le cache de votre navigateur..)

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

5

Juste mes quelques cents de 2016.

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

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

Et en PHP j'ai utilisé $ _POST ['stamp']. Même de localhost j'ai 90-100 ms pour chaque demande comme ceci. Je simplement changé:

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

et en PHP commuté à $ _GET [ 'timbre']. 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, je reçois les mêmes résultats tout le temps.

Questions connexes