5438 sujets

Sémantique web et HTML

Bonjour à vous tous,

J'attaque maintenant les balises à la base de l'interactivité d'un site web.

Il existe deux méthodes d'envoie des données à traiter. La Méthode GET et la méthode POST. La première, qui fait passer les données par l'URL du navigateur, possède deux inconvénients : l'utilisateur peut mettre n'importe quoi dans la barre d'adresse et elle est limitée dans le nombre de caractères à saisir dans cette barre. Il ne faut pas utiliser cette méthode pour des raisons évidentes de sécurité, notamment si on doit envoyer des données sensibles du genre le numéro de la carte bancaire. La seconde méthode est plus adaptée puisqu'elle va tout envoyer à la page web dans les en-têtes HTTP que renvoie le navigateur. Elle est plus sécurisée contre les pirates.

Voici deux questions : pourquoi avoir crée les deux méthodes, une sensible et l'autre sécurisée, alors qu'une seule, en l'occurrence la sécurisée, aurait suffit ? Est-ce que c'est d'abord la méthode GET qui a été proposée aux développeurs puis, plus tard, dans une version du HTML plus évoluée, la méthode POST pour sécuriser les envois de donné ?

Que le code soit avec vous !
Modifié par ObiJuanKenobi (18 Feb 2022 - 06:51)
Hello there,

En fait, des méthodes HTTP, il n'y en a pas que deux mais ... neuf ! (https://developer.mozilla.org/fr/docs/Web/HTTP/Methods)

Chacune de ces méthodes est associée à un usage spécifique dans la description du protocole HTTP. Pour rappel, lorsque ton navigateur communique avec un serveur pour t'afficher une page Web, il utilise le protocole HTTP. Ces échanges ne sont en fait rien d'autre que du texte formaté de manière standardisée.

Un message HTTP est composé de deux parties, l'en-tête et le corps. L'en-tête comprend des métadonnées envoyées par le client ou le serveur. Par exemple, voici l'en-tête de la requête HTTP envoyée par mon navigateur pour afficher cette page :
GET /topic-2-89287-1-Difference-entre-GET-et-POST.html HTTP/1.1
Cookie: PHPSESSID=xxxxxxxxxxx; f_filter=lasttopics; authid=xxxx; authkey=xxxxxxx
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Host: forum.alsacreations.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.3 Safari/605.1.15
Accept-Language: fr-FR,fr;q=0.9
Referer:  https://forum.alsacreations.com/forum.php
 
Connection: keep-alive

Il s'agit d'une requêtes GET, car on demande au serveur de nous envoyer le contenu d'une page (/topic-2-89287-1-Difference-entre-GET-et-POST.html). Le serveur va alors répondre avec d'abord une en-tête :
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Pragma: no-cache
Content-Security-Policy: default-src 'self' *.alsacreations.net *.alsacreations.test *.gstatic.com *.googleapis.com; style-src 'self' fonts.googleapis.com *.alsacreations.net *.alsacreations.test 'unsafe-inline'; img-src * data:
Content-Encoding: gzip
X-XSS-Protection: 1; mode=block
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Date: Fri, 18 Feb 2022 07:44:40 GMT
Content-Length: 7500
Connection: close
X-Content-Type-Options: nosniff
Vary: Accept-Encoding
X-Frame-Options: DENY
Server: Apache/2.4.25 (Debian) OpenSSL/1.0.2u
X-Permitted-Cross-Domain-Policies: none
Strict-Transport-Security: max-age=15768000; preload

... suivie dans le corps du contenu de la page (en l'occurence, le code source HTML, qui sera interprété par le navigateur). Tu peux observer ces échanges dans la console de ton navigateur.

La méthode POST, elle, a été conçue pour qu'un client envoie des données à un serveur. Lorsque ton navigateur envoie en requête POST à un serveur, il va envoyer les en-têtes, mais aussi un corps, comprenant des données.

Lorsqu'on créé un formulaire en HTML, on peut choisir d'utiliser la méthode GET ou la méthode POST pour envoyer les données. Dans le premier cas, les données du formulaire sont envoyés dans l'en-tête, sous forme de paramètres d'URL. Dans le second, les données se trouvent dans le corps de la requête POST. Les deux méthodes sont à la disposition et ont des usages différents.

Avec la méthode GET, il est possible d'envoyer les données d'un formulaire vers une autre page, sans passer par un traitement côté serveur, alors qu'avec la méthode POST, on peut envoyer à un serveur des données plus volumineuses, qui ne sont pas forcément du texte.

Dernier point, il n'y a pas de méthode plus sécurisée qu'une autre. Il est certes plus facile d'ajouter manuellement des paramètres à une URL dans la barre d'adresse de son navigateur, mais il existe également une pléthore d'outils permettant de créer et d'envoyer des requêtes POST, PUT, DELETE, etc.

En espérant avoir répondu à tes questions Smiley smile
Meilleure solution
Salut Guillaume,

Merci pour ces explications détaillées. Je ne savais pas qu'il existait 9 méthodes et je comprends mieux la raison d'utilisation des deux méthodes GET ou POST.

En lisant mes cours, j'ai compris que si on veut envoyer des données sensibles (numéro de carte bancaire), des données très longues (un sondage), des fichiers (PDF, JPEG, PNG) il faut utiliser exclusivement la méthode POST et non GET. Est-ce vrai ?
Modifié par ObiJuanKenobi (18 Feb 2022 - 17:27)
Salut,

Pas vraiment en réalité. La méthode POST est pas du tout plus sécurisée. N’importe quelle personne qui intercepte tes paquets sur le réseau est en mesure de récupérer la totalité des données. C’est le chiffrement du canal qui te protège (HTTPS).

Je t’encourage à te documenter sur le protocole HTTP et sur les « standards » REST (entre guillemets car ce ne sont que des recommandations). Tu y comprendras pas mal de choses.
Salut,

Pour la faire courte, à moins d'avoir des besoins très spécifiques qui justifieraient l'utilisation de la méthode GET, il vaut mieux toujours envoyer les données d'un formulaire vers un serveur avec la méthode POST. Il n'y a que des avantages :
- Les données n'apparaissent pas dans la Bare d'adresse, l'historique de navigation, les marques-pages, etc.
- Il est possible d'envoyer un gros volume de données
- On peut envoyer des données qui ne sont pas que du texte

Je rejoins Anymah sur la question de la sécurité. L'utilisation de HTTPS est le minimum vital pour sécuriser les données en transit entre le client et ton serveur.

Enfin, concernant la "sécurité" dans le sens "empêcher les utilisateurs de faire n'importe quoi avec ton formulaire", tout se joue dans la manière avec laquelle tu valides les données côté serveur. Comme le dis le dicton : "Ne jamais faire confiance aux entrées utilisateur" Smiley cligne