263 votes

Quand dois-je utiliser la méthode GET ou POST ? Quelle est la différence entre les deux ?

Quelle est la différence lorsqu'on utilise GET o POST méthode ? Laquelle est la plus sûre ? Quels sont les (dés)avantages de chacune d'elles ?

( question similaire )

3 votes

Get n'a pas de corps, ce qui signifie en pratique que vous êtes limité aux paires nom -> valeur comme structure de données, en raison de l'absence de tout format d'encodage de chaîne de requête pour des structures plus complexes. Si vous avez besoin de gérer des structures de données plus complexes dans vos requêtes (par exemple un tableau, un objet, etc.), vous devez utiliser POST et peut-être des formats plus avancés (json/xml). En bref : n'utilisez GET que si vous êtes vraiment obligé (c'est-à-dire que l'URL/la ressource doit pouvoir être découverte).

1 votes

276voto

troelskn Points 51966

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 modifier, tandis que POST est utilisé pour modifier quelque chose. Par exemple, une page de recherche doit utiliser GET, tandis qu'un formulaire permettant de modifier votre mot de passe doit utiliser POST.

Notez également que PHP confond un peu les concepts. Une requête POST reçoit les données de la chaîne de requête et du corps de la requête. Une requête GET ne prend en compte que la chaîne de caractères de la requête. Ainsi, une requête POST est un sur-ensemble d'une requête GET ; vous pouvez utiliser la méthode suivante $_GET dans une requête POST, et il peut même être judicieux d'avoir des paramètres portant le même nom dans les requêtes $_POST y $_GET qui signifient des choses différentes.

Par exemple, disons que vous avez un formulaire pour modifier un article. L'identifiant de l'article peut se trouver dans la chaîne de requête (et donc être disponible par l'intermédiaire de la fonction $_GET['id'] ), mais disons que vous voulez changer l'identifiant de l'article. Le nouvel identifiant peut alors être présent dans le corps de la requête ( $_POST['id'] ). Bon, ce n'est peut-être pas le meilleur exemple, mais j'espère qu'il illustre la différence entre les deux.

14 votes

La différence entre GET et POST présente un aspect sécuritaire certain. Un site malveillant peut insérer une requête GET arbitraire dans une balise d'image, par exemple, ce qui oblige les utilisateurs à effectuer une requête GET sur un autre serveur. Si cette requête GET est du type autreserver/deletemyaccount alors de mauvaises choses arrivent.

3 votes

Ce que je voulais dire, c'est que le contenu de $_POST n'est pas magiquement caché aux utilisateurs malveillants. Il y a évidemment des aspects de sécurité dans tout ce qui est programmation.

1 votes

Cet article ne répond pas complètement à la question car il ne mentionne pas les implications en matière de sécurité. La partie supérieure est bonne, à condition que la faute d'orthographe "pain English" soit remplacée par "plain English". La partie inférieure est trop difficile à suivre. Dans l'ensemble, c'est bien mieux que mon message :-)

84voto

IAdapter Points 15876

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

La méthode GET, qui a été utilisée dans l'exemple précédent, ajoute des paires nom/valeur à l'URL. Malheureusement, la longueur d'une URL est limitée, de sorte que cette méthode ne fonctionne que si les paramètres sont peu nombreux. L'URL pourrait être tronquée si le formulaire utilise un grand nombre de paramètres, ou si les paramètres contiennent de grandes quantités de données. En outre, les paramètres transmis par l'URL sont visibles dans le champ d'adresse du navigateur, ce qui 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 regroupe les paires nom/valeur dans le corps de la requête HTTP, ce qui donne une URL plus propre et n'impose aucune limite de taille à la sortie des formulaires. Elle est également plus sûre.

4 votes

Parce que c'est plus difficile à changer ? vous pouvez changer GET dans la barre d'adresse, mais ce n'est pas aussi facile avec POST.

10 votes

Le serveur ne peut pas faire confiance au client. Concevoir votre application autour de fausses hypothèses est loin d'être sûr.

0 votes

Openid n'est pas non plus à sauver, car il peut être cassé ?

40voto

alex Points 211

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

Vous utilisez :

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

2 votes

Que faire si le modèle de service demande/réponse est utilisé et que vous voulez faire les deux ? ;) Je préfère utiliser POST dans la plupart des cas où j'ai besoin d'une réponse en retour.

9 votes

C'est généralement vrai. GET est parfaitement capable d'envoyer des données également, ce qui ne constitue pas une réponse très précise.

26voto

Einstein Points 2935

Il y a deux implications communes de "sécurité" pour utiliser GET . Comme les données apparaissent dans la chaîne URL, il est possible que quelqu'un qui regarde par-dessus votre épaule dans la barre d'adresse/URL puisse voir quelque chose qu'il ne devrait pas voir, comme un cookie de session qui pourrait être utilisé pour détourner votre session. Gardez à l'esprit que tout le monde a des téléphones avec appareil photo.

L'autre implication de la sécurité de GET a à voir avec GET qui sont enregistrées dans le journal d'accès de la plupart des serveurs web en tant que partie de l'URL de la demande. En fonction de la situation, du climat réglementaire et de la sensibilité générale des données, cela peut susciter des inquiétudes.

Certains clients/pare-feu/systèmes de sécurité informatique peuvent désapprouver GET des demandes contenant une quantité excessive de données et peuvent donc fournir des résultats peu fiables.

POST prend en charge des fonctionnalités avancées telles que la prise en charge des entrées binaires en plusieurs parties utilisées pour le téléchargement de fichiers vers des serveurs Web.

POST nécessite un en-tête de longueur de contenu, ce qui peut accroître la complexité de la mise en œuvre d'une application client spécifique, car la taille des données soumises doit être connue à l'avance, ce qui empêche la formation d'une demande client dans un mode incrémental à passage unique. Il s'agit peut-être d'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.

18voto

Mark Biek Points 41769

J'utilise GET quand je cherche des informations. de une URL et un POST lorsque j'envoie des informations a une URL.

1 votes

Mais vous pouvez aussi utiliser GET pour envoyer. La différence est le format (dans l'url (GET) ou dans la requête (POST)).

0 votes

Si le point d'accès accepte un fichier et renvoie une ligne du fichier (sans création ou modification de données ni base de données), le point d'accès doit-il être GET ou POST ?

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