D'après ce que je peux rassembler, il existe trois catégories:
- Ne jamais utiliser
GET
et utiliserPOST
- Ne jamais utiliser
POST
et utiliserGET
- Peu importe celui que vous utilisez.
Ai-je raison de supposer ces trois cas? Si oui, quels sont les exemples de chaque cas?
Réponses:
Utilisez
POST
pour des actions destructrices telles que la création (je suis conscient de l'ironie), l'édition et la suppression, car vous ne pouvez pas frapper unePOST
action dans la barre d'adresse de votre navigateur. À utiliserGET
en toute sécurité pour permettre à une personne d'appeler une action. Donc une URL comme:Devrait vous amener à une page de confirmation, plutôt que de simplement supprimer l'élément. Il est beaucoup plus facile d'éviter les accidents de cette façon.
POST
est également plus sûr queGET
, car vous ne collez pas d'informations dans une URL. Et donc utiliserGET
commemethod
un formulaire HTML qui recueille un mot de passe ou d'autres informations sensibles n'est pas la meilleure idée.Une dernière remarque:
POST
peut transmettre une plus grande quantité d'informations queGET
. 'POST' n'a pas de restrictions de taille pour les données transmises, tandis que 'GET' est limité à 2048 caractères.la source
En bref
GET
pour lessafe and
idempotent
demandesPOST
pour lesneither safe nor idempotent
demandesEn détail Il y a une place appropriée pour chacun. Même si vous ne suivez pas les principes RESTful , vous pouvez gagner beaucoup en apprenant sur REST et sur le fonctionnement d'une approche orientée ressources.
Une
safe
opération est une opération qui nenot change the data
demande.Une
idempotent
opération est une opération dans laquelle le résultat,be the same
peu importe le nombre de fois que vous le demanderez.Il va de soi que, comme les GET sont utilisés pour des opérations sûres , ils sont automatiquement également idempotents . Généralement, un GET est utilisé pour récupérer une ressource (une question et ses réponses associées lors d'un débordement de pile par exemple) ou une collection de ressources.
Je sais que la question portait sur GET et POST, mais je reviendrai sur POST dans une seconde.
Typiquement, un PUT est utilisé pour éditer une ressource (éditer une question ou une réponse sur débordement de pile par exemple).
En règle générale, un POST serait utilisé pour créer une nouvelle ressource, par exemple en créant une nouvelle question SO (bien que dans certains modèles, un PUT soit également utilisé pour cela).
Si vous exécutez le POST deux fois, vous finirez par créer DEUX nouvelles questions.
Discussion
En termes pratiques, les navigateurs Web modernes ne prennent généralement en charge que GET et POST de manière fiable (vous pouvez effectuer toutes ces opérations via des appels javascript, mais en termes de saisie de données dans les formulaires et de validation, vous avez généralement les deux options). Dans une application RESTful, le POST sera souvent remplacé pour fournir également les appels PUT et DELETE.
Mais, même si vous ne suivez pas les principes RESTful, il peut être utile de penser en termes d'utilisation de GET pour récupérer / afficher des informations et POST pour créer / modifier des informations.
Vous ne devez jamais utiliser GET pour une opération qui modifie des données. Si un moteur de recherche explore un lien vers votre mauvaise opération ou les signets du client, cela pourrait causer de gros problèmes.
la source
Utilisez GET si cela ne vous dérange pas que la demande soit répétée (c'est-à-dire qu'elle ne change pas d'état).
Utilisez POST si l'opération modifie l'état du système.
la source
method
obligatoire)Version courte
OBTENIR: généralement utilisé pour les demandes de recherche soumises, ou toute demande pour laquelle l'utilisateur souhaite pouvoir afficher à nouveau la page exacte.
Avantages de GET:
Inconvénients de GET:
POST: utilisé pour les demandes de sécurité plus élevées où les données peuvent être utilisées pour modifier une base de données ou une page que vous ne souhaitez pas que quelqu'un marque en signet.
Avantages de POST:
Inconvénients de POST:
Version plus longue
Directement à partir du protocole de transfert hypertexte - HTTP / 1.1 :
la source
La première chose importante est la signification de GET par rapport à POST:
Après cela, deux ou trois choses qui peuvent être notées:
Quoi qu'il en soit, je ne pense pas que nous pourrions "vivre" sans GET: pensez au nombre d'URL que vous utilisez avec des paramètres dans la chaîne de requête, chaque jour - sans GET, tout cela ne fonctionnerait pas ;-)
la source
http://example.com/var1/value1/var2/value2/var3/value3
nous pourrions "techniquement" ne plus avoir GET ...www.mypage.com/contact/
utilisations GET en interne pour quelque chose commeindex.php?url=/contact/
Outre la différence de contraintes de longueur dans de nombreux navigateurs Web, il existe également une différence sémantique. Les GET sont censés être «sûrs» dans la mesure où ce sont des opérations en lecture seule qui ne modifient pas l'état du serveur. Les POST changeront généralement d'état et donneront des avertissements sur la nouvelle soumission. Les robots d'indexation des moteurs de recherche peuvent faire des GET mais ne devraient jamais faire de POST.
Utilisez GET si vous souhaitez lire des données sans changer d'état et utilisez POST si vous souhaitez mettre à jour l'état sur le serveur.
la source
Ma règle générale consiste à utiliser Get lorsque vous faites des requêtes au serveur qui ne vont pas changer d'état. Les publications sont réservées aux demandes au serveur qui modifient l'état.
la source
Une différence pratique est que les navigateurs et les serveurs Web ont une limite sur le nombre de caractères pouvant exister dans une URL. C'est différent d'une application à l'autre, mais il est certainement possible de le toucher si vous avez des
textarea
s dans vos formulaires.Un autre problème avec les GET - ils sont indexés par les moteurs de recherche et autres systèmes automatiques. Google avait un jour un produit qui récupérait les liens sur la page que vous consultiez, ils seraient donc plus rapides à charger si vous cliquiez sur ces liens. Cela a causé des ravages majeurs sur les sites qui avaient des liens comme
delete.php?id=1
- les gens ont perdu tous leurs sites.la source
Utilisez GET lorsque vous souhaitez que l'URL reflète l'état de la page. Ceci est utile pour afficher des pages générées dynamiquement, telles que celles vues ici. Un POST doit être utilisé dans un formulaire pour soumettre des données, comme lorsque je clique sur le bouton "Publier votre réponse". Il produit également une URL plus propre car il ne génère pas de chaîne de paramètres après le chemin.
la source
Étant donné que les GET sont purement des URL, ils peuvent être mis en cache par le navigateur Web et peuvent être mieux utilisés pour des choses comme des images générées de manière cohérente. (Définir une heure d'expiration)
Un exemple de la page gravatar: http://www.gravatar.com/avatar/4c3be63a4c2f539b013787725dfce802?d=monsterid
GET peut améliorer légèrement les performances, certains serveurs Web écrivent le contenu POST dans un fichier temporaire avant d'appeler le gestionnaire.
Une autre chose à considérer est la limite de taille. Les GET sont limités par la taille de l'URL, 1024 octets par défaut, bien que les navigateurs puissent en prendre en charge davantage.
Transférer plus de données que cela devrait utiliser un POST pour obtenir une meilleure compatibilité du navigateur.
Encore moins que cette limite est un problème, comme l'a écrit une autre affiche, tout ce qui se trouve dans l'URL pourrait se retrouver dans d'autres parties de l'interface utilisateur du navigateur, comme l'histoire.
la source
Il n'y a rien que vous ne puissiez pas faire en soi. Le fait est que vous n'êtes pas censé modifier l'état du serveur sur un HTTP GET. Les proxys HTTP supposent que, puisque HTTP GET ne modifie pas l'état, le fait qu'un utilisateur invoque HTTP GET une fois ou 1000 fois ne fait aucune différence. En utilisant ces informations, ils supposent qu'il est sûr de renvoyer une version mise en cache du premier HTTP GET. Si vous cassez la spécification HTTP, vous risquez de casser le client HTTP et les proxys dans la nature. Ne le fais pas :)
la source
Cela traverse le concept de REST et la façon dont le Web était destiné à être utilisé. Il existe un excellent podcast sur la radio Software Engineering qui donne un exposé approfondi sur l'utilisation de Get et Post.
Get est utilisé pour extraire des données du serveur, où une action de mise à jour ne devrait pas être nécessaire. L'idée étant que vous devriez pouvoir utiliser la même demande GET encore et encore et avoir les mêmes informations retournées. L'URL contient les informations get dans la chaîne de requête, car elle était censée pouvoir être facilement envoyée à d'autres systèmes et à des personnes comme une adresse où trouver quelque chose.
Post est censé être utilisé (au moins par l'architecture REST sur laquelle le Web est un peu basé) pour pousser les informations vers le serveur / dire au serveur d'effectuer une action. Exemples tels que: mettre à jour ces données, créer cet enregistrement.
la source
1.3 Liste de contrôle rapide pour choisir HTTP
GET
ouPOST
Utilisez GET si:
Utilisez POST si:
Source .
la source
L'utiliser pour mettre à jour l'état - comme un GET
delete.php?id=5
pour supprimer une page - est très risqué. Les gens l'ont découvert lorsque l'accélérateur Web de Google a commencé à précharger les URL sur les pages - il a frappé tous les liens de suppression et effacé les données des personnes. La même chose peut arriver avec les araignées des moteurs de recherche.la source
POST peut déplacer des données volumineuses, contrairement à GET.
Mais généralement, il ne s'agit pas d'une pénurie de GET, mais plutôt d'une convention si vous voulez que votre site Web / application Web se comporte bien.
Jetez un œil à http://www.w3.org/2001/tag/doc/whenToUseGet.html
la source
De RFC 2616 :
la source
J'utilise POST lorsque je ne veux pas que les gens voient le QueryString ou lorsque le QueryString devient volumineux. En outre, POST est nécessaire pour les téléchargements de fichiers.
Je ne vois pas de problème en utilisant GET, je l'utilise pour des choses simples où il est logique de garder les choses sur QueryString.
L'utilisation de GET permettra également de créer un lien vers une page particulière où POST ne fonctionnerait pas.
la source
L'intention initiale était d'utiliser GET pour récupérer les données et POST devait être n'importe quoi. La règle générale que j'utilise est que si j'envoie quelque chose au serveur, j'utilise POST. Si j'appelle simplement une URL pour récupérer des données, j'utilise GET.
la source
Lisez l' article sur HTTP dans Wikipedia . Il expliquera ce qu'est le protocole et ce qu'il fait:
et
Le W3C a un document nommé URI, adressabilité et l'utilisation de HTTP GET et POST qui explique quand utiliser quoi. En citant
et
Un exemple pratique serait chaque fois que vous soumettez un formulaire HTML. Vous spécifiez soit publier soit obtenir pour l'action de formulaire. PHP remplira $ _GET et $ _POST en conséquence.
la source
En PHP,
POST
la limite de données est généralement définie par votrephp.ini
.GET
est limité par les paramètres du serveur / navigateur, je crois - généralement autour des255
octets.la source
De w3schools.com :
Nous distinguons ici les principales différences:
la source
Version simple de POST GET PUT DELETE
la source
Eh bien, une chose importante est que tout ce que vous soumettez
GET
sera exposé via l'URL. Deuxièmement, comme le dit Ceejayoz, il y a une limite de caractères pour une URL.la source
Une autre différence est que POST nécessite généralement deux opérations HTTP, alors que GET n'en requiert qu'une.
Edit: je dois clarifier - pour les modèles de programmation courants. Généralement, répondre à un POST avec une page Web HTML directe est une conception discutable pour diverses raisons, dont la gênante "vous devez soumettre à nouveau ce formulaire, le souhaitez-vous?" en appuyant sur le bouton de retour.
la source
expect: 100-continue
tête, puis à n'envoyer des données qu'une fois que le serveur répond avec un100 CONTINUE
.Comme d'autres l'ont répondu, il y a une limite sur la taille de l'URL avec get, et les fichiers peuvent être soumis avec la publication uniquement.
Je voudrais ajouter que l'on peut ajouter des choses à une base de données avec un get et effectuer des actions avec un post. Lorsqu'un script reçoit un message ou un get, il peut faire tout ce que l'auteur veut qu'il fasse. Je crois que le manque de compréhension vient du libellé choisi par le livre ou de la façon dont vous le lisez.
Un auteur de script doit utiliser des publications pour modifier la base de données et utiliser get uniquement pour la récupération d'informations.
Les langages de script ont fourni de nombreux moyens pour accéder à la demande. Par exemple, PHP permet l'utilisation de
$_REQUEST
pour récupérer un article ou un get. Il faut éviter cela au profit des plus spécifiques$_GET
ou$_POST
.Dans la programmation Web, il y a beaucoup plus de place pour l'interprétation. Il y a ce que l'on doit et ce que l'on peut faire, mais lequel est le meilleur est souvent sujet à débat. Heureusement, dans ce cas, il n'y a pas d'ambiguïté. Vous devez utiliser les messages pour modifier les données, et vous devriez utiliser pour obtenir de récupérer des informations.
la source
Gorgapor,
mod_rewrite
utilise encore souventGET
. Il permet simplement de traduire une URL plus conviviale en une URL avec uneGET
chaîne de requête.la source
Les données HTTP Post n'ont pas de limite spécifiée sur la quantité de données, alors que différents navigateurs ont des limites différentes pour les GET. Le RFC 2068 déclare:
Plus précisément, vous devez avoir les bonnes constructions HTTP pour leur utilisation. Les HTTP GET ne devraient pas avoir d'effets secondaires et peuvent être actualisés et stockés en toute sécurité par des proxy HTTP, etc.
Les POST HTTP sont utilisés lorsque vous souhaitez soumettre des données à une ressource URL.
Un exemple typique d'utilisation de HTTP GET se trouve dans une recherche, c'est-à-dire Search? Query = my + query Un exemple typique d'utilisation d'un HTTP POST consiste à envoyer des commentaires à un formulaire en ligne.
la source