5587 sujets

Sémantique web et HTML

Bonjour à vous tous,

Je viens enfin de comprendre la différence entre les méthodes GET et POST, utilisées dans la balise <form> en HTML. Avec une base de données, on a 2 options : soit on consulte son contenu, soit on écrit dans la base de données. C'est le rôle de ces deux méthodes : GET permet de consulter le contenu, c'est-à-dire d'afficher une partie de son contenu, et POST permet de changer le contenu de la base de données, c'est-à-dire ajouter, modifier, supprimer. En somme, GET "lit" et POST "modifie".

Voici un exemple de formulaire utilisant la méthode POST :
upload/1747287414-62242-post.png

Et voici un exemple de formulaire utilisant la méthode GET :
upload/1747287440-62242-get.png

Par contre, ce que je n'arrive pas à visualiser dans ma tête c'est que, quelque soit la méthode choisie, l'envoi des données doit se faire vers un fichier spécifié dans l'attribut action="traitement.php" (bien qu'il ne soit pas obligatoire d'indiquer cet attribut avec la méthode GET, juste recommandé). Cet envoi se fait dans le corps de la requête HTTP. C'est ça que je ne parviens pas à m'imager, qu'est-ce que le corps de la requête HTTP ? Y a-t-il moyen de visualiser ce corps quelque part ?

Merci pour vos aides et
Que le code soit avec vous !
Modifié par ObiJuanKenobi (15 May 2025 - 07:51)
Bonjour,

Tout d'abord, ce n'est pas tout à fait exact, la différence entre GET et POST, c'est que les données lors d'un envoi en GET sont encodées dans l'url alors que les données en POST sont envoyées dans la requête http, tu peux aussi passer des données binaires en POST (pour de l'upload de fichiers par exemple) alors qu'en GET, tu ne passes que des caractères ASCII.

Tu n'as pas besoin d'un formulaire pour faire du GET (contrairement au POST), d'ailleurs si tu affiches l'inspecteur réseau de ton navigateur et que tu actualises la page d'accueil du site, tu verras que l'appel se fait en GET.

Il n'y a pas d'obligation de faire de l'écriture en base lors d'un POST, par exemple un formulaire de contact peut simplement envoyer un mail depuis un site qui n'a même pas de base de données.

L'utilisation du GET pour la lecture et du POST pour l'écriture, c'est plutôt une bonne pratique qui est maintenant utilisée dans toutes les api REST (on fait du GET pour lire, du POST pour écrire).

L'envoi se fait toujours vers une URL précise pour pouvoir traiter les données, dans un formulaire, si tu ne le précise pas les données sont envoyées sur la page qui soumet le formulaire.

Tu peux visualiser le corps (le contenu) des requêtes http dans ton navigateur en affichant les outils de développement web (CTRL + MAJ + I sous Firefox et chrome) dans l'onglet 'réseau'.
Tu pourras sélectionner les requêtes et voir les entêtes et le contenu des requêtes.

Gillesr
Modifié par gillesr (15 May 2025 - 10:18)
Modérateur
Bonjour,

ObiJuanKenobi a écrit :
En somme, GET "lit" et POST "modifie".

Pas du tout. Les deux permettent de faire la même chose côté serveur.

La différence principale entre les deux c'est que les informations transmises via GET sont ajoutées à l'URL (elles sont donc visibles par l'internaute, sont stockées en clair dans l'historique du navigateur, etc.) tandis que celles transmises via POST ne le sont pas (elles sont donc transmises de manière plus confidentielle). Par ailleurs les informations transmises par GET sont limitées en taille, alors que celles transmises par POST ne le sont pas.

Amicalement,
Modérateur
Bonjour,

gillesr a écrit :
... tu peux aussi passer des données binaires en POST (pour de l'upload de fichiers par exemple) alors qu'en GET, tu ne passes que des caractères ASCII.
Certes mais on peut %-encoder les caractères non ASCII et les transmettre via GET.

gillesr a écrit :
Tu n'as pas besoin d'un formulaire pour faire du GET (contrairement au POST)
Si on utilise par exemple fetch en javascript, il me semble qu'on peut "faire du POST" sans avoir besoin d'un formulaire !

gillesr a écrit :
L'utilisation du GET pour la lecture et du POST pour l'écriture, c'est plutôt une bonne pratique qui est maintenant utilisée dans toutes les api REST (on fait du GET pour lire, du POST pour écrire).
Certes. Mais c'est purement conventionnel.
EDIT: et par ailleurs, le GET et le POST ont été "inventés" bien avant les API REST, et ont une utilisation plus large.

Amicalement,
Modifié par parsimonhi (15 May 2025 - 10:41)