379 votes

Quand utilisez-vous POST et lorsque vous utilisez GET ?

De ce que je peux comprendre, il existe trois catégories - jamais utiliser obtenir et utiliser le poteau, jamais utiliser POST et GET, et il n’est pas grave que celui que vous utilisez.

Ai-je raison en supposant que ces trois cas ? Dans l’affirmative, quels sont les exemples de chaque cas ?

415voto

Brian Warshaw Points 8806

Utilisation POST pour les actions destructrices, telles que la création (je suis conscient de l'ironie), la modification, et de suppression, parce que vous ne pouvez pas frapper un POST d'action dans la barre d'adresse de votre navigateur. Utiliser OBTENIR 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.

La POSTE est également plus sûr de vous, parce que vous n'êtes pas coller des informations dans une URL. Et donc, en utilisant OBTENIR que l' method 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: le POST peut transmettre une plus grande quantité d'informations que d'OBTENIR. Je ne me souviens pas exactement des contraintes de chacun, mais l'avantage est important.

224voto

reefnet_alex Points 5850

Il y a une place pour chacun. Même si vous ne suivez pas Reposante 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 va utiliser pour des opérations qui sont à la fois sûrs et idempotent. Un coffre-fort opération est une opération qui ne change pas les données demandées. Un idempotent de fonctionnement est celui dans lequel le résultat sera le même, peu importe combien de fois vous le demande. Il va de soi que, comme il Obtient sont utilisés pour la sécurité des opérations, 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 le Met (je sais que la question était à propos de GET et POST, mais je vais revenir à POSTER dans une seconde) pour des opérations qui sont pas à l'abri , mais qui sont idempotents. 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 allait être utilisée pour toute opération qui n'est ni sûr ou 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à :)

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.

83voto

Douglas Leeder Points 29986

Utiliser GET si vous ne me dérange pas la demande se répète (c’est que ça ne change d’État).

Utilisez le poste si l’opération ne change pas l’état du système.

67voto

Cimplicity Points 1593

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

29voto

Pascal MARTIN Points 195780

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

  • OBTENEZ devrait être utilisé pour...... quelques informations à partir du serveur,
  • tout POST doit être utilisé pour envoyer des informations 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 bookrmark pages
  • Il y a une limite dans la taille des paramètres vous pouvez passer que GET (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 ;-)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X