Quand utilisez-vous POST et quand utilisez-vous OBTENIR?
De ce que j'ai pu rassembler, il y a trois catégories:
- Ne jamais utiliser
GET
et l'utilisationPOST
- Ne jamais utiliser
POST
et l'utilisationGET
- Il n'est pas question que celle que vous utilisez.
Suis-je raison de supposer que ces trois cas? Si oui, quelles en sont quelques exemples de chaque cas?
- C'est en fait absolument pas vrai. GET et POST sont à la fois visibles dans la même mesure, si vous admirez les en-têtes envoyés par votre navigateur, vous verrez une liste de paires clé-valeur que vous publiez
- w3.org/2001/tag/doc/whenToUseGet.html
- Il n'existe pas de méthode standard pour coder plus de nom -> paires de valeur dans les chaînes de requête de sorte que si vos demandes sont très basiques(pas de tableaux ou structures de données imbriquées), vous devriez envisager de ne POSTER que ce qui fournit un champ de corps que vous pouvez utiliser avec les formats d'encodage (JSON, XML, etc).
Vous devez vous connecter pour publier un commentaire.
Utilisation
POST
destructrice des actions telles que la création (je suis conscient de l'ironie), la modification, et de suppression, parce que vous ne pouvez pas frapper unPOST
action dans la barre d'adresse de votre navigateur. UtilisationGET
quand il est sûr de permettre à une personne de faire appel à une action. Si une URL comme:Devrait vous amener à une page de confirmation, plutôt que de simplement la suppression de l'élément. Il est beaucoup plus facile d'éviter les accidents de cette façon.
POST
est aussi plus sûr queGET
, parce que vous n'êtes pas coller des informations dans une URL. Et donc, en utilisantGET
comme lemethod
d'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' a pas de restrictions de taille pour la transmission de données, tandis que " GET " est limitée à 2 048 caractères.http://example.com/login?username=moe&password=yourenotsupposedtoseeme
POST
pour la suppression, par opposition àDELETE
?DELETE
ouPUT
demandes-ils seulement envoyerGET
etPOST
. Évidemment, si vous êtes à la rédaction d'un API plutôt que basée sur un navigateur application,DELETE
serait sémantiquement correct.En bref
GET
poursafe and
quantité
demandesPOST
pourneither safe nor idempotent
demandesDans les détails
Il y a une place pour chacun. Même si vous ne suivez pas Reposant principes, beaucoup de choses peuvent être obtenus à partir de l'apprentissage sur le REPOS et le comment d'une ressource approche orientée vers les œuvres.
Un
safe
opération est une opération qui nenot change the data
demandé.Un
idempotent
fonctionnement est celui dans lequel le résultat sera à labe the same
peu importe combien de fois vous le demande.Il va de soi que, comme il Obtient sont utilisés pour sûr opérations qu'ils sont automatiquement aussi idempotent. Généralement un GET est utilisé pour l'extraction d'une ressource (une question et ses réponses sur un débordement de pile par exemple) ou à la collecte de ressources.
Je sais que la question était à propos de GET et POST, mais je vais revenir à POSTER dans un second.
Généralement une est utilisée pour la modification d'une ressource (l'édition d'une question ou d'une réponse à un débordement de pile par exemple).
Généralement un POST allait être utilisé pour créer une nouvelle ressource pour l'exemple de la création d'une NOUVELLE question (bien que dans certains modèles de vente seraient utilisés pour ce travail).
Si vous exécutez le message deux fois et vous allez finir par la création de DEUX nouvelles questions.
Discussion
Dans la pratique, les navigateurs web modernes en général seulement un soutien POST et GET de façon fiable (vous pouvez effectuer toutes ces opérations à l'aide de javascript appelle, mais en termes de saisie de données dans les formulaires et en appuyant sur soumettre, vous avez généralement eu les deux options). Dans un cadre Reposant de l'application de la POSTE sera souvent surchargée de fournir les METTRE et de SUPPRIMER des appels aussi.
Mais, même si vous ne suivez pas Reposante principes, il peut être utile de penser en termes de l'utilisation de GET pour la récupération /affichage de l'information et de la POSTE pour créer /modifier des informations.
Vous devriez ne jamais les utiliser pour OBTENIR une opération qui modifie les données. Si un moteur de recherche, analyse un lien vers votre mal op, ou le client signets elle pourrait signifier de gros problèmes.
Utiliser si vous n'avez pas l'esprit de la demande de répétition (C'est qu'il ne change pas d'état).
Utilisation POST si l'opération n'est de changer l'état du système.
method
obligatoire)Version Courte
OBTENIR: Généralement utilisé pour les présenté des demandes de recherche, ou pour toute demande d'où vous voulez que l'utilisateur soit en mesure de tirer vers le haut de la page exacte de nouveau.
Avantages de OBTENIR:
Les inconvénients d'OBTENIR:
POST: Utilisé pour plus de sécurité les demandes pour lesquelles les données peuvent être utilisées pour modifier une base de données, ou une page que vous ne voulez pas que quelqu'un signet.
Avantages du POSTE:
Inconvénients de POSTE:
Version Longue
Directement à partir de la Protocole de Transfert hypertexte -- HTTP/1.1:
La première chose importante est la sens d'OBTENIR par rapport POST :
Après cela, un couple de choses qui peut être noté :
De toute façon, je ne pense pas que nous avons pu "vivre" sans OBTENIR : pensez à combien d'Url que vous utilisez avec les paramètres dans la chaîne de requête, tous les jours, sans OBTENIR, tous ceux qui ne travaillent pas 😉
http://example.com/var1/value1/var2/value2/var3/value3
nous pourrions "techniquement" pas OBTENIR plus...www.mypage.com/contact/
utilise GET en interne pour quelque chose commeindex.php?url=/contact/
En dehors de la longueur des contraintes de différence dans de nombreux navigateurs web, il y a aussi une différence sémantique. Obtient sont censés être "safe" en ce qu'ils sont en lecture seule des opérations qui ne modifient pas l'état du serveur. POSTs sont généralement changent d'état et donne des avertissements sur la nouvelle présentation. Des moteurs de recherche des moteurs de recherche peut faire l'Obtient, mais ne devriez jamais prendre de Postes.
Utiliser si vous souhaitez lire les données sans changer d'état, et de l'utilisation POST si vous voulez mettre à jour l'état sur le serveur.
Mes règle générale est d'utiliser Obtenez lorsque vous faites des demandes vers le serveur qui ne vont pas à modifier l'état. Des postes sont réservés pour les demandes vers le serveur qui modifient l'état.
Une différence pratique est que les navigateurs et les serveurs web ont une limite sur le nombre de caractères qui peuvent exister dans une URL. C'est différent d'une application à l'autre, mais il est certainement possible de les frapper si vous avez
textarea
s dans vos formulaires.Un autre gotcha Obtient - ils obtenir indexées par les moteurs de recherche et autres systèmes automatiques. Google a déjà eu un produit de pré-extraction de liens sur la page que vous étiez en train de consulter, de sorte qu'ils allaient être plus rapide à charger si vous avez cliqué sur ces liens. Il a causé majeur des ravages sur les sites qui avaient des liens comme
delete.php?id=1
- les gens ont perdu l'ensemble de leurs sites.GET
demandes de get quelque chose.POST
demandes de ne quelque chose. La même URL peuvent répondre à un POST et GET demandes, et de faire des choses différentes en fonction. Google va indexer les OBTENIR de l'Url qu'il rencontre. Si il y a une URL à/qpoiweurpiowqueproiuwer.html
et rien de liens, Google ne savez pas à propos de qui que ce soit.Utiliser quand vous voulez que l'URL à refléter l'état de la page. Ceci est utile pour l'affichage des pages générées dynamiquement, tels que ceux observés ici. Un POSTE doit être utilisé dans un formulaire pour soumettre les données, comme lorsque je clique sur "publier Votre Réponse" bouton. Il produit également un nettoyant URL car il ne génère pas un paramètre de chaîne après le chemin d'accès.
Parce que Reçoit sont purement Url, ils peuvent être mis en cache par le navigateur web et peut-être mieux utilisé pour des choses comme toujours généré des images. (Régler l'heure d'Expiration)
Un exemple de l'gravatar page: http://www.gravatar.com/avatar/4c3be63a4c2f539b013787725dfce802?d=monsterid
Peut OBTENIR le rendement légèrement meilleure performance, certains serveurs web ecrire un article contenu dans un fichier temporaire avant d'invoquer le gestionnaire.
Une autre chose à considérer est la limite de taille. Obtient sont limitées par la taille de l'URL, 1024 octets par la norme, bien que les navigateurs peuvent prendre en charge plusieurs.
Transférer plus de données que cela devrait utiliser un POST pour obtenir une meilleure compatibilité avec les navigateurs.
Même moins que la limite est un problème, comme une autre affiche a écrit, rien dans l'URL pourrait retrouver dans d'autres parties de l'ordinateur de l'INTERFACE utilisateur, comme l'histoire.
Il n'y a rien que vous ne pouvez pas le faire par soi. Le point est que vous n'êtes pas censé de modifier l'état du serveur sur un HTTP GET. Les proxies HTTP supposent que, depuis HTTP GET ne modifie pas l'état de la question de savoir si un utilisateur invoque HTTP GET une fois ou 1000 fois ne fait aucune différence. À l'aide de cette information, ils supposent qu'il est sûr de revenir à une version en cache de la première HTTP GET. Si vous cassez la spécification HTTP, vous risquez de casser client HTTP et les serveurs proxy dans le sauvage. Ne pas le faire 🙂
Cette traverse dans le concept de REPOS et de comment le web était plutôt destiné à être utilisé. Il y a un super podcast sur l'Ingénierie du Logiciel radio qui donne une profondeur de parler de l'utilisation de Get et Post.
Obtenir est utilisé pour extraire des données à partir du serveur, où une action de mise à jour ne devrait pas être nécessaire. L'idée est que vous devriez être en mesure d'utiliser la même demande à plusieurs reprises et ont la même information retournée. L'URL a la obtenir de l'information dans la chaîne de requête, car il était censé être en mesure d'être facilement transmis à d'autres systèmes et des gens comme une adresse où trouver quelque chose.
Post est censé être utilisé (au moins par le RESTE de l'architecture qui le web est un peu basé sur) pour pousser l'information vers le serveur/dire le serveur pour effectuer une action. Des exemples comme: mise à Jour des données, Créer cet enregistrement.
1.3 Liste de contrôle Rapide pour Choisir HTTP
GET
ouPOST
Utiliser si:
Utilisation POSTE:
Source.
De l'utiliser pour mettre à jour l'état comme un OBTENIR de
delete.php?id=5
pour supprimer une page est très risqué. Les gens ont trouvé que lorsque Google web accelerator commencé à le pré-chargement des Url sur les pages - il frapper tous les "supprimer" des liens et anéanti des peuples de données. La même chose peut se produire avec les spiders des moteurs de recherche.POST peut se déplacer sur de grandes données, tout ne peut pas OBTENIR.
Mais généralement il n'est pas sur un shortcomming d'OBTENIR, plutôt une convention si vous souhaitez que votre site web/webapp se comporte bien.
Ont un coup d'oeil à http://www.w3.org/2001/tag/doc/whenToUseGet.html
De La RFC 2616:
- Je utiliser POST quand je ne veux pas les gens à voir le QueryString ou lorsque la chaîne de Requête est grande. De plus, le POST est nécessaire pour l'upload de fichiers.
Je ne vois pas le problème au moyen de l'OBTENIR cependant, je l'utilise pour des choses simples où il est logique de garder les choses sur la chaîne de Requête.
À l'aide de GET permettra de relier à une page en particulier possible trop où POSTER ne serait pas de travail.
Version Simple de la POSTE se METTRE SUPPRIMER
interne de la POSTE permettra de créer de nouvelles ressources
L'intention initiale était que GET a été utilisé pour obtenir des données POST était d'être quoi que ce soit. La règle de base que j'utilise, c'est que si je suis d'envoyer quoi que ce soit sur le serveur, j'utilise la POSTE. Si je suis juste de l'appel d'une URL pour récupérer les données, j'utilise OBTENIR.
Lire la article sur HTTP dans le Wikipedia. Il va vous expliquer ce que le protocole est et ce qu'il fait:
et
Le W3C a un document nommé Uri, Adressabilité, et l'utilisation de HTTP GET et POST qui explique lors de l'utilisation de ce. Citant
et
Pratique, exemple serait lorsque vous soumettez un formulaire HTML. Vous spécifiez post ou obtenir pour l'action du formulaire. PHP va peupler $_GET et $_POST en conséquence.
En PHP,
POST
limite de données est généralement fixé par votrephp.ini
.GET
est limitée par le serveur/paramètres du navigateur je le crois, généralement autour de255
octets.De w3schools.com:
Ici, nous distinguons les principales différences:
Bien une chose principale est tout ce que vous soumettez sur
GET
va être exposé via l'URL. Deuxièmement, comme Ceejayoz dit, il y a une limite de caractères pour une URL.Une autre différence est que le POSTE nécessite généralement deux HTTP opérations, tandis que l'OBTENIR ne nécessite qu'un seul.
Edit: je me dois de préciser--pour le commun des modèles de programmation. Généralement répondre à un message avec une quinte du code HTML de la page web est discutable conception pour une variété de raisons, dont l'une est l'ennuyeux", vous devez renvoyer ce formulaire, voulez-vous le faire?" en appuyant sur le bouton de retour.
expect: 100-continue
en-tête, et ensuite seulement à envoyer des données une fois que le serveur répond avec un100 CONTINUE
.Comme répondu par d'autres, il y a une limite sur la taille url à obtenir, et les fichiers peuvent être soumis avec la poste 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 post ou un get, il peut faire tout ce que l'auteur veut qu'il fasse. Je crois que le manque de compréhension vient de la rédaction de la livre ont choisi ou comment vous le lire.
Un auteur du script devrait utiliser des postes de modifier la base de données et l'utilisation d'obtenir seulement pour la récupération de l'information.
Langages de script fourni de nombreux moyens d'accéder à la demande. Par exemple, PHP permet l'utilisation de
$_REQUEST
pour récupérer un post ou un get. On devrait éviter ce en faveur de la plus spécifique$_GET
ou$_POST
.Dans la programmation web, il y a beaucoup plus de place à l'interprétation. Il y a ce que l'on devrait et peut faire, mais lequel est le mieux est souvent l'objet de débats. Heureusement, dans ce cas, il n'y a pas d'ambiguïté. Vous devrait utiliser des postes de modifier des données, et vous devrait utilisez get pour récupérer des informations.
Gorgapor,
mod_rewrite
encore souvent utiliseGET
. Il permet tout simplement de traduire une URL conviviale dans une URL avec unGET
chaîne de requête.HTTP Post, les données n'ont pas une certaine limite sur la quantité de données, où que les différents navigateurs ont des limites différentes pour OBTENIR de l'. La RFC 2068 états:
Spécifiquement, vous avez le droit HTTP constructions pour ce qu'ils sont utilisés pour. HTTP GET ne devrait pas avoir d'effets secondaires et peut être bien reposé et stockées par des Proxys HTTP, etc.
HTTP POST sont utilisés lorsque vous voulez envoyer des données par rapport à une url de la ressource.
Un exemple typique pour l'utilisation de HTTP GET est sur une Recherche, c'est à dire de la Recherche?Query=ma+requête
Un exemple typique pour l'utilisation d'un HTTP POST est l'envoi de commentaires à un formulaire en ligne.