443 votes

Quelle est la différence entre POST et GET ?

J'ai récemment été impliqués avec PHP/AJAX/jQuery et il me semble qu'une partie importante de ces technologies est d' POST & GET.

Tout d'abord, quelle est la différence entre POST et GET? Par le biais de l'expérimentation, je sais qu' GET ajoute le retour des variables et leurs valeurs à la chaîne de l'URL, mais POST n'est pas:

website.com/directory/index.php?name=YourName&bday=YourBday

Alors, est-ce la seule différence ou il y a des règles spécifiques ou des conventions pour l'utilisation de l'un ou de l'autre?

Deuxièmement, j'ai aussi vu des POST & GET en dehors de PHP... également en AJAX et jQuery. Comment puis - POST & GET diffèrent entre ces 3? Sont-ils la même idée, les mêmes fonctionnalités, juste utilisé différemment?

491voto

Justin Ethier Points 57486

GET et POST sont deux différents types de requêtes HTTP.

Selon Wikipedia:

OBTENEZ les demandes d'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.

Donc, essentiellement, GET est utilisé pour récupérer des données à distance, et POST est utilisé pour insérer/mettre à jour des données à distance.


Spécification HTTP/1.1 (RFC 2616) de l'article 9 de la Méthode Définitions contient plus d'informations sur l' GET et POST ainsi que d'autres méthodes HTTP, si vous êtes intéressé.

En plus d'expliquer les usages de chaque méthode, la spécification fournit également au moins une raison pratique pour laquelle GET ne doit être utilisé pour récupérer les données:

Les auteurs de services qui utilisent le protocole HTTP ne DEVRAIENT PAS utiliser la fonction de formulaire pour la soumission de données sensibles, parce que cela va provoquer ces données codé dans l'URI de Demande. De nombreux serveurs existants, des mandataires et agents d'utilisateur journal de l'URI de la demande dans un endroit où il pourrait être visible à des tiers. Les serveurs peuvent utiliser des POST-formulaire de soumission de la place


Enfin, une considération importante lors de l'utilisation d' GET pour les requêtes AJAX, c'est que certains navigateurs (IE, en particulier - en cache les résultats de l' GET la demande. Donc, si vous, par exemple, un sondage en utilisant le même GET demande, vous obtiendrez toujours le même résultat, même si les données que vous demandez est en cours de mise à jour côté serveur. Une manière de résoudre ce problème est de faire de l'URL unique pour chaque requête en ajoutant un timestamp.

119voto

cHao Points 42294

Un POST, contrairement à un GET, a généralement l'information pertinente dans le corps de la demande. ( GET Ne devrait pas avoir un corps, donc, mis à part les cookies, le seul endroit pour passer l'info, c'est dans l'URL.) Outre le maintien de l'URL relativement propre, POST vous permet également de vous envoyer beaucoup plus d'informations (comme les Url sont limités en longueur, à toutes fins pratiques), et vous permet d'envoyer n'importe quel type de données (fichier de téléchargement des formulaires, par exemple, ne peut pas utiliser GET -- ils doivent utiliser POST plus un spécial type de contenu/encodage).

A côté de cela, un POST signifie que la demande va changer quelque chose, et ne doit pas être refait bon gré mal gré. C'est pourquoi vous voyez parfois votre navigateur vous demande si vous souhaitez renvoyer des données de formulaire lorsque vous appuyez sur le bouton "retour".

GET, d'autre part, devrait être idempotent -- ce qui signifie que vous pourrait faire des millions de fois et le serveur va faire la même chose (et de montrer essentiellement le même résultat) à chaque fois.

40voto

Alex Points 371

Tandis que pas une description des différences, ci-dessous est un couple de choses à penser quand choisir la bonne méthode.

  • GET prie peut être mis en cache par le navigateur, qui peut être un problème (ou avantages) lors de l’utilisation d’ajax.
  • Demande de GET expose des paramètres pour les utilisateurs (POST fait aussi bien mais ils sont moins visibles).
  • POSTE peut passer beaucoup plus d’informations sur le serveur et peut être presque n’importe quelle durée.

25voto

Victor Nicollet Points 16924

POSTE et se sont deux méthodes de demande de HTTP. OBTENIR est généralement destiné à récupérer une partie des données, et devrait être idempotent (répétition de la requête n'a pas d'effets secondaires) et ne peut envoyer que des quantités limitées de données de paramètre sur le serveur. OBTENEZ les demandes sont souvent mises en cache par défaut par certains navigateurs, si vous n'êtes pas prudent.

POST est destiné pour changer l'état du serveur. Il contient plus de données, et de répéter la requête est autorisée (et doivent) avoir des effets secondaires tels que la création de deux messages au lieu d'un.

21voto

Robert Koritnik Points 45499

Apprendre sous-jacente Protocole HTTP

Ceci est similaire à la conduite d'une voiture. Vous vous acheter une voiture et aller sur la route, mais vous ne savez pas l'un des signes, de lumières ou d'autres règles que vous devez obéir. Évidemment, vous n'êtes pas en mesure de conduire, même si vous savez comment gérer une voiture. Au moins pas en toute sécurité. Pas pour toi, ni pour les autres.

Vous devriez en apprendre un peu plus sur le protocole HTTP. GET/POST ne sont pas liés (au moins pas directement) de PHP/AJAX/jQuery ou similaire. Ils les utilisent parce qu'ils sont l'aide du protocole HTTP pour la communication. Et il y a beaucoup plus de Protocole HTTP que juste GET et POST.

Découvrez quelques-uns de ceux-ci, puis rechercher sur votre propre ainsi:

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