Question

De ce que j'ai pu rassembler, il y a trois catégories:

  1. N'utilisez jamais de GET et l'utilisation POST
  2. N'utilisez jamais de POST et l'utilisation GET
  3. 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?

Était-ce utile?

La solution

Utilisation POST pour les actions destructrices, telles que la création (je suis conscient de l'ironie), l'édition et la suppression, parce que vous ne pouvez pas frapper un POST action dans la barre d'adresse de votre navigateur.Utilisation GET quand il est sûr de permettre à une personne de faire appel à une action.Si une URL de la forme:

http://myblog.org/admin/posts/delete/357

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 également plus sûr que GET, parce que vous n'êtes pas coller des informations dans une URL.Et donc, en utilisant GET comme l' method pour 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 que GET.'POST' a pas de restrictions de taille pour la transmission de données, tandis que " GET " est limitée à 2 048 caractères.

Autres conseils

En bref

  • Utilisation GET pour safe andidempotent les demandes
  • Utilisation POST pour neither safe nor idempotent les demandes

Dans 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.

Une bonne application use GETs pour les opérations qui sont à la fois safe and idempotent.

Un safe l'opération est une opération qui ne not change the data demandé.

Un idempotent le fonctionnement est celui dans lequel le résultat sera be the same peu importe combien de fois vous le demande.

Il va de soi que, comme il Obtient sont utilisés pour coffre-fort les 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.

Une bonne application va utiliser PUTs pour les opérations qui sont not safe but idempotent.

Je sais que la question était à propos de GET et POST, mais je vais revenir à POSTER dans un second.

Typiquement vente est utilisé pour l'édition d'une ressource (l'édition d'une question ou d'une réponse à un débordement de pile par exemple).

Un POST serait utilisé pour toute opération qui est neither safe or idempotent.

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.

Il y a aussi une opération de SUPPRESSION, mais je devine je peux laisser celui là :)

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 ne devez jamais 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.

Utilisation 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.

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 d'OBTENIR:

  • Les url peuvent être mis en signet en toute sécurité.
  • Les Pages peuvent être rechargées en toute sécurité.

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:

  • Les paires nom-valeur ne sont pas affichés dans l'url.(Sécurité += 1)
  • Nombre illimité de paires nom-valeur peut être transmis par la POSTE. De référence.

Les inconvénients de la POSTE:

  • Page utilisée publier des données ne peut pas être signet.(Si vous le souhaité.)

Version Longue

Directement à partir de la Protocole de Transfert hypertexte -- HTTP/1.1:

9.3

La méthode GET récupérer des informations (sous la forme d'une entité) est identifié par l'URI de Demande.Si l'URI de la Requête se réfère à un processus de production, il est le produit des données qui doivent être retournés comme une entité dans la réponse et non pas le texte source de la procédure, sauf que le texte se trouve à la sortie du processus.

La sémantique de la méthode GET changer pour un "conditionnel GET" si le message de demande comprend une Si-Modified-since, If-Unmodified-Since, Si-Match, Si-None-Match, ou Si-Plage de champ d'en-tête.Un sursis d'OBTENIR des demandes de méthode que l'entité être transféré que dans les circonstances décrites par le conditionnel en-tête de champ(s).Le conditionnel méthode GET est destiné à réduire l'utilisation du réseau en permettant aux entités de cache à être actualisée sans nécessiter de multiples demandes ou de transfert de données déjà détenues par le client.

La sémantique de la méthode GET changer pour un "GET partielle" si le message de demande comprend une Gamme de champ d'en-tête.Partielle des demandes que seule une partie de l'entité transférée, comme décrit dans la section 14.35.L'partielle de la méthode GET est destiné à réduire l'utilisation du réseau en permettant partiellement récupéré entités à être complété sans transférer les données déjà détenues par le client.

La réponse à une requête GET est mis en cache si et seulement si elle satisfait les conditions pour la mise en cache HTTP décrit dans la section 13.

Voir la section 15.1.3 pour des raisons de sécurité lorsqu'il est utilisé pour les formes.

9.5 POST

La méthode POST est utilisée pour demander au serveur d'origine, accepter le entité incluse dans la requête comme des subalternes de la ressource identifié par l'URI de la Requête dans la Ligne de Requête.POST est conçu afin de permettre une méthode uniforme pour couvrir les fonctions suivantes:

  • L'Annotation des ressources existantes;

  • Poster un message dans un forum, groupe de discussion, liste de diffusion, ou similaire d'un groupe d'articles;

  • Fournir un bloc de données, telles que le fait de soumettre une forme, à un processus de traitement des données;

  • L'extension d'une base de données par le biais d'une opération d'ajout.

La fonction réalisée par la méthode POST est déterminée par la serveur et est généralement fonction de l'URI de Demande.Posté entité est subordonné que l'URI de la même manière qu'un fichier est subordonnée pour un répertoire contenant, un article de presse est subordonnée à un groupe de discussion à laquelle il est publié, ou un enregistrement est subordonné à un la base de données.

L'action effectuée par la méthode POST n'aboutissent pas à un des ressources qui peuvent être identifiés par une URI.Dans ce cas, soit 200 (OK) ou 204 (Pas de Contenu) est la réponse appropriée état, en fonction de si oui ou non la réponse inclut une entité qui décrit le résultat.

La première chose importante est l' sens de GET par rapport à la POSTE, à :

  • OBTENEZ devrait être utilisé pour...obtenir des...quelques informations à partir de le serveur,
  • tout POST doit être utilisé pour envoyer de l'information pour le serveur.


Après cela, un couple de choses que l'on peut noter :

  • À l'aide de GET, les utilisateurs peuvent utiliser le bouton "retour" dans leur navigateur, et ils peuvent marquer des pages
  • Il y a une limite dans la taille des paramètres vous pouvez passer comme OBTENIR (2KB pour certaines versions d'Internet Explorer, si je ne me trompe pas) ;la limite est beaucoup plus pour le POST, et dépend généralement de la configuration du serveur.


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 ;-)

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.

Utilisation 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.

Ma règle générale est d'utiliser Obtenez lorsque vous effectuez des requêtes au 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 textareas 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é les grands des ravages sur les sites qui avaient des liens comme delete.php?id=1 - les gens ont perdu l'ensemble de leurs sites.

Utilisez OBTENEZ lorsque 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

OBTENIR peut 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é pour 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 est un excellent podcast sur l'Ingénierie du Logiciel radio qui donne une profondeur de parler de l'utilisation de Get et Post.

Get 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 ou POST

Utiliser si:

    The interaction is more like a question (i.e., it is a safe operation such as a query, read operation, or lookup).

Utilisation POST si:

    The interaction is more like an order, or
    The interaction changes the state of the resource in a way that the user would perceive (e.g., a subscription to a service), or
    The user be held accountable for the results of the interaction.

Source.

je ne vois pas un problème à l'aide de get bien, je l'utilise pour des choses simples où il est logique de garder les choses sur la chaîne de requête.

Aide à la mise à jour de l'état comme un GET 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.

Le POST peut se déplacer sur de grandes données, tout ne peut pas OBTENIR.

Mais en général, ce n'est pas une shortcomming d'OBTENIR, plutôt une convention si vous souhaitez que votre site web/webapp se comporte bien.

Jetez un oeil à http://www.w3.org/2001/tag/doc/whenToUseGet.html

À partir de La RFC 2616:

9.3 OBTENEZ de l'
La méthode GET récupération des informations (sous forme de une entité) est identifié par le URI de demande.Si l'URI de la Requête se réfère de données-processus de production, c'est la produit des données qui doivent être retournés comme l'entité dans la réponse et non le texte source de la procédure, sauf ce texte se trouve être la sortie de le processus.


9.5 POST
La méthode POST est utilisée pour demander au serveur d'origine accepter l'entité incluse dans le requête comme subordonné de l' la ressource identifiée par l'URI de Demande dans la Ligne de Requête.POST est conçu afin de permettre une méthode uniforme pour couvrir les fonctions suivantes:

  • L'Annotation des ressources existantes;
  • Poster un message dans un forum, groupe de discussion, liste de diffusion, ou similaire d'un groupe d'articles;
  • Fournir un bloc de données, comme le résultat de la soumission d'un formulaire, à un processus de traitement des données;
  • L'extension d'une base de données par le biais d'une opération d'ajout.

L'effectif de la fonction remplie par le La méthode POST est déterminée par la serveur et dépend habituellement de l' URI de demande.L'entité est posté les actions subalternes à cette URI, dans le même manière qu'un fichier est subordonnée à un répertoire contenant, un communiqué de l'article est subordonné à un groupe de discussion à laquelle il est publié, ou un enregistrement est subordonnée à une base de données.

L'action effectuée par la POSTE méthode pourrait ne pas entraîner une ressource qui peut être identifié par un URI.Dans ce cas, soit 200 (OK) ou 204 (Pas de Le contenu) est la réponse appropriée statut, selon si oui ou non la réponse inclut une entité qui décrit le résultat.

J'utilise 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

  • utiliser GET - lorsque vous voulez obtenir toutes les ressources comme la Liste de données repose sur aucune Id ou le Nom
  • l'utilisation POST - lorsque vous voulez envoyer des données au serveur.gardez à l'esprit POST est de poids lourds, parce que pour la mise à jour, nous devrions l'utiliser METTRE à la place de la POSTE interne de la POSTE permettra de créer de nouvelles ressources
  • utiliser METTEZ - lorsque vous

L'intention initiale était que GET a été utilisé pour obtenir des données en arrière et 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:

OBTENEZ de l'

Demande une représentation de la ressource spécifiée.Notez que se ne doit pas être utilisé pour les opérations qui provoquent des effets secondaires, tels que l'utiliser pour prendre des mesures dans des applications web.Une raison à cela est que GET peuvent être utilisés de façon arbitraire par des robots ou des robots, qui ne devrait pas avoir besoin de considérer les effets secondaires qu'une requête doit provoquer.

et

POST Soumet les données à traiter (par exemple, à partir d'un formulaire HTML) pour la ressource.Les données sont incluses dans le corps de la demande.Cela peut entraîner la création d'une nouvelle ressource ou les mises à jour des ressources existantes ou les deux.

Le W3C est un document nommé Uri, Adressabilité, et l'utilisation de HTTP GET et POST qui explique comment utiliser ce.Citant

1.3 Liste de contrôle Rapide pour Choisir HTTP GET ou POST

  • Utiliser si:
    • L'interaction est plus comme une question (c'est à dire, il est un sécurité de l'exploitation comme une requête, opération de lecture ou de recherche).

et

  • Utilisation POST si:
    • L'interaction est plus comme un ordre, ou
    • L'interaction des changements de l'état de la ressource, de manière que l'utilisateur perçoit (par exemple, un abonnement à un service), ou o L'utilisateur sera tenu pour responsable des résultats de l'interaction.

Cependant, avant que la décision finale à l'utilisation de HTTP GET ou POST, veuillez également tenir compte de considérations pour les données sensibles et des considérations pratiques.

Pratique, exemple serait lorsque vous soumettez un formulaire HTML.Vous spécifiez post ou obtenez de l' pour l'action du formulaire.PHP va peupler $_GET et $_POST en conséquence.

En PHP, POST les données de la limite est généralement fixée par votre php.ini. GET est limitée par le serveur/paramètres du navigateur je le crois, généralement autour de 255 octets.

À partir de w3schools.com:

Qu'est-ce que HTTP?

Le Protocole de Transfert Hypertexte (HTTP) est conçu pour permettre à les communications entre les clients et les serveurs.

Le HTTP fonctionne comme un protocole de demande-réponse entre un client et un serveur.

Un navigateur web peut être le client, et une application sur un ordinateur qui héberge un site web peut être le serveur.

Exemple:Un client (navigateur) soumet une requête HTTP vers le serveur;ensuite, le serveur renvoie une réponse au client.La réponse contient des informations d'état sur la demande et peut également contenir les contenu demandé.

Deux Méthodes de Demande de HTTP:GET et POST

Les deux méthodes couramment utilisées pour une requête-réponse entre un client et serveur sont:GET et POST.

OBTENEZ – les Demandes de données à partir d'une ressource déterminée d'après – envoie des données à être traitées à une ressource spécifiée

Ici, nous distinguons les principales différences:

enter image description here

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.

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 seulement.

Je voudrais ajouter que l'on peut ajouter des éléments à 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.

Les 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 ce que l'on 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 utiliser get pour récupérer des informations.

Gorgapor, mod_rewrite encore souvent utilise GET.Il permet tout simplement de traduire une URL conviviale dans une URL avec un GET chaîne de requête.

HTTP publier des données n'ont pas de limite spécifiée 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:

Les serveurs doivent être prudents à propos de l' en fonction de l'URI longueurs supérieures à 255 octets, parce que certains anciens clients ou proxy implémentations peuvent pas correctement l'appui de ces longueurs

Plus précisément, vous devriez 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 à direDe recherche?Query=ma+requête Un exemple typique pour l'utilisation d'un HTTP POST est l'envoi de commentaires à un formulaire en ligne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top