web-dev-qa-db-fra.com

Quand devrais-je utiliser la méthode GET ou POST? Quelle est la différence entre eux?

Quelle est la différence avec la méthode GET ou POST? Lequel est le plus sécurisé? Quels sont les avantages ou les inconvénients de chacun d'eux?

( question similaire )

227
Adriana

Ce n'est pas une question de sécurité. Le protocole HTTP définit les requêtes de type GET comme étant idempotent , alors que les POST peuvent avoir des effets secondaires. En clair, cela signifie que GET est utilisé pour afficher quelque chose, sans le changer, alors que POST est utilisé pour changer quelque chose. Par exemple, une page de recherche doit utiliser GET, tandis qu'un formulaire qui modifie votre mot de passe doit utiliser POST.

Notez également que PHP confond un peu les concepts. Une demande POST obtient une entrée à partir de la chaîne de requête et par l'intermédiaire du corps de la demande. Une requête GET obtient simplement une entrée de la chaîne de requête. Ainsi, une demande POST est un sur-ensemble d'une demande GET; vous pouvez utiliser $_GET dans une demande POST, et il peut même être judicieux de définir des paramètres portant le même nom dans $_POST et $_GET, ce qui signifie différentes choses.

Par exemple, supposons que vous ayez un formulaire pour éditer un article. L'article-id peut être dans la chaîne de requête (et donc disponible via $_GET['id']), mais supposons que vous souhaitiez changer l'id de l'article. Le nouvel identifiant peut alors être présent dans le corps de la requête ($_POST['id']). OK, peut-être que ce n'est pas le meilleur exemple, mais j'espère que cela illustre la différence entre les deux.

241
troelskn

Lorsque l'utilisateur entre des informations dans un formulaire et clique sur Soumettre, les informations peuvent être envoyées du navigateur au serveur: dans l'URL ou dans le corps de la requête HTTP.

La méthode GET, utilisée dans l'exemple précédent, ajoute des paires nom/valeur à l'URL. Malheureusement, la longueur d'une URL est limitée et cette méthode ne fonctionne que s'il y a peu de paramètres. L'URL peut être tronqué si le formulaire utilise un grand nombre de paramètres ou si les paramètres contiennent de grandes quantités de données. De plus, les paramètres passés sur l'URL sont visibles dans le champ d'adresse du navigateur. Ce n'est pas le meilleur endroit pour afficher un mot de passe.

L'alternative à la méthode GET est la méthode POST. Cette méthode intègre les paires nom/valeur dans le corps de la requête HTTP, ce qui crée une URL plus propre et n'impose aucune limite de taille à la sortie des formulaires. C'est aussi plus sécurisé.

75
IAdapter

La meilleure réponse était la première.

Vous utilisez:

  • GET lorsque vous souhaitez récupérer des données (GET DATA).
  • POST lorsque vous souhaitez envoyer des données (POST DATA).
37
alex

L’utilisation de GET a deux implications communes en matière de "sécurité". Étant donné que les données apparaissent dans la chaîne d'URL, il est possible que quelqu'un regarde par-dessus votre épaule dans la barre d'adresse. L'URL pourra peut-être afficher quelque chose qu'elle ne devrait pas connaître, comme un cookie de session pouvant potentiellement être utilisé pour pirater votre session. Gardez à l'esprit tout le monde a un téléphone avec appareil photo.

L'autre implication de GET en matière de sécurité concerne les variables GET enregistrées dans le journal d'accès de la plupart des serveurs Web dans le cadre de l'URL demandée. Selon la situation, le climat réglementaire et la sensibilité générale des données, cela peut potentiellement susciter des inquiétudes.

Certains clients/pare-feu/systèmes IDS peuvent se désintéresser des demandes GET contenant une quantité excessive de données et peuvent donc fournir des résultats peu fiables.

Le POST prend en charge des fonctionnalités avancées telles que la prise en charge d’une entrée binaire en plusieurs parties utilisée pour le téléchargement de fichiers sur des serveurs Web.

Le POST requiert un en-tête de longueur de contenu qui peut augmenter la complexité de la mise en œuvre d'un client spécifique à une application, car la taille des données soumises doit être connue à l'avance pour empêcher la formation d'une demande client dans un mode incrémental exclusivement à un seul passage. Peut-être un problème mineur pour ceux qui choisissent d’abuser de HTTP en l’utilisant comme transport RPC (Remote Procedure Call).

D'autres ont déjà fait un bon travail en couvrant les différences sémantiques et la partie "quand" de cette question.

20
Einstein

J'utilise GET lorsque je récupère des informations de une URL et POST lorsque j'envoie des informations à une URL.

17
Mark Biek

Vous devez utiliser POST s'il y a beaucoup de données, ou trier des informations sensibles (les éléments très sensibles nécessitent également une connexion sécurisée).

Utilisez GET si vous souhaitez que les utilisateurs puissent ajouter un signet à votre page, car toutes les données sont incluses dans le signet.

Faites juste attention aux personnes qui utilisent REFRESH avec la méthode GET, car les données seront renvoyées à chaque fois sans prévenir l'utilisateur (le POST avertit parfois l'utilisateur de renvoyer des données).

16
Grant

Ce document W3C explique l'utilisation de HTTP GET et POST.

Je pense que c'est une source faisant autorité.

Le résumé est (section 1.3 du document):

  • Utilisez GET si l’interaction ressemble davantage à une question (c’est-à-dire qu’il s’agit d’une opération sécurisée telle qu’une requête, une opération de lecture ou une recherche).
  • Utilisez POST si:
    • L'interaction s'apparente davantage à un ordre, ou
    • L’interaction modifie l’état de la ressource d’une manière que l’utilisateur percevrait (par exemple, un abonnement à un service), ou
    • L'utilisateur soit tenu responsable des résultats de l'interaction.
13
chus

Les méthodes Get et Post n'ont rien à voir avec la technologie de serveur que vous utilisez, cela fonctionne de la même manière en php, asp.net ou Ruby. GET et POST font partie du protocole HTTP. Comme indiqué, POST est plus sécurisé. Les formulaires POST ne sont pas non plus mis en cache par le navigateur. POST est également utilisé pour transférer de grandes quantités de données.

10
sarsnake

La raison d'utiliser POST lors de la modification de données:

  • Un accélérateur Web tel que Google Web Accelerator cliquera sur tous les liens (GET) d’une page et les mettra en cache. C'est très grave si les liens apportent des modifications.
  • Un navigateur met en cache les demandes GET. Ainsi, même si l'utilisateur clique sur le lien, il peut ne pas envoyer de demande au serveur pour exécuter le changement.
  • Pour protéger votre site/votre application contre CSRF, vous devez utiliser POST. Pour sécuriser complètement votre application, vous devez également générer un identifiant unique sur le serveur et l’envoyer dans la requête.

En outre, ne mettez pas d'informations sensibles dans la chaîne de requête (option uniquement avec GET), car elles apparaissent dans la barre d'adresse, les signets et les journaux du serveur.

Espérons que cela explique pourquoi les gens disent que POST est "sécurisé". Si vous transmettez des données sensibles, vous devez utiliser SSL.

8
Sarel Botha

GET et POST sont des méthodes HTTP qui peut atteindre des objectifs similaires

GET est essentiellement destiné à récupérer (récupérer) des données. A GET ne doit pas avoir de corps. Ainsi, mis à part les cookies, le seul endroit pour transmettre des informations est l'URL et les URL sont limitées en longueur, GET est moins sécurisé que POST car les données envoyées font partie de l'URL

N'utilisez jamais GET lors de l'envoi de mots de passe, de cartes de crédit ou d'autres informations sensibles !, Les données sont visibles pour tout le monde dans l'URL, données pouvant être mises en cache. GET est inoffensif lorsque nous rechargeons ou rappelons le bouton, il est marqué dans le livre, les paramètres restent dans l'historique du navigateur, seuls les caractères ASCII sont autorisés.

POST peut impliquer quoi que ce soit, comme stocker ou mettre à jour des données, commander un produit ou envoyer un courrier électronique. POST méthode a un corps.

La méthode POST est sécurisée pour transmettre des informations sensibles et confidentielles au serveur. Elle ne sera pas visible dans les paramètres de requête de l'URL et les paramètres ne sont pas enregistrés dans l'historique du navigateur. Il n'y a pas de restrictions sur la longueur des données. Lors du rechargement, le navigateur doit avertir l'utilisateur que les données sont sur le point d'être soumises à nouveau. La méthode POST ne peut pas être enregistrée

6
user3540599
  1. La méthode GET est utilisée pour envoyer les données moins sensibles alors que la méthode POST est utilisée pour envoyer les données sensibles.
  2. En utilisant la méthode POST, vous pouvez envoyer une grande quantité de données par rapport à la méthode GET.
  3. Les données envoyées par la méthode GET sont visibles dans la barre d’en-tête du navigateur, tandis que celles envoyées par la méthode POST sont invisibles.
2
Dhirendra

Utilisez la méthode GET si vous souhaitez récupérer les ressources depuis une URL. Si vous appuyez sur le bouton précédent de votre navigateur, vous pourrez toujours voir la dernière page. Elle pourrait également être marquée par un signet, ce qui la rend moins sûre que la méthode POST.

Utilisez la méthode POST si vous souhaitez "soumettre" quelque chose à l'URL. Par exemple, vous voulez créer un compte Google et vous devrez peut-être renseigner toutes les informations détaillées, puis cliquer sur le bouton 'Soumettre' (la méthode POST est appelée ici), une fois que vous avez envoyé votre message et essayer de cliquer à nouveau sur le bouton de votre navigateur. , vous obtiendrez une erreur ou un nouveau formulaire vierge au lieu de la dernière page avec le formulaire rempli.

0
rObOtAndChalie