Skip to content

📅 SAISON B Semaine 2 Épisode 4 - GET et POST

📚 Notions du jour

Aujourd’hui, j’ai plongĂ© dans les deux mĂ©thodes HTTP les plus fondamentales : GET et POST. Ces mĂ©thodes sont essentielles pour envoyer des donnĂ©es d’un client (comme un navigateur web) Ă  un serveur. Elles servent des objectifs trĂšs diffĂ©rents et ont des comportements distincts.


🔍 MĂ©thode GET : Les DonnĂ©es dans l’URL

La mĂ©thode GET est utilisĂ©e pour demander des donnĂ©es Ă  un serveur. Lorsqu’on utilise GET, les donnĂ©es sont envoyĂ©es dans l’URL sous forme de paramĂštres de requĂȘte. Cela rend les requĂȘtes GET visibles et partageables, mais aussi moins sĂ©curisĂ©es pour les donnĂ©es sensibles (puisque l’URL peut ĂȘtre enregistrĂ©e ou partagĂ©e).

Syntaxe des RequĂȘtes GET

  • L’URL commence par un ? pour indiquer le dĂ©but des paramĂštres de requĂȘte (query parameters).
  • Chaque paramĂštre est une paire clĂ©-valeur : clĂ©=valeur.
  • Plusieurs paramĂštres sont sĂ©parĂ©s par &.

Exemple :

https://example.com/search?q=express&sort=asc
  • q=express : La requĂȘte de recherche est "express".
  • sort=asc : Les rĂ©sultats doivent ĂȘtre triĂ©s par ordre ascendant.

Comment GĂ©rer les RequĂȘtes GET dans Express

Dans Express, on peut accéder aux paramÚtres GET en utilisant req.query.

Exemple :

// Express route to handle a GET request
app.get('/search', (req, res) => {
  const query = req.query.q; // Access to 'q' parameter
  const sortOrder = req.query.sort; // Access to 'sort' parameter

  res.send(`Searching for: ${query}, sorted by: ${sortOrder}`);
});

Explications :

  • req.query est un objet contenant tous les paramĂštres de requĂȘte.
  • Si l’URL est /search?q=express&sort=asc, req.query sera { q: 'express', sort: 'asc' }.

Cas d’Utilisation pour GET :

  • Recherche (ex. : recherche Google).
  • Filtrage de donnĂ©es (ex. : filtres de produits sur un site e-commerce).
  • Partage ou marquage d’URLs (puisque les paramĂštres sont visibles dans l’URL).

đŸ“© MĂ©thode POST : Les DonnĂ©es dans le Corps de la RequĂȘte

La mĂ©thode POST est utilisĂ©e pour envoyer des donnĂ©es au serveur afin de crĂ©er ou mettre Ă  jour une ressource. Contrairement Ă  GET, les donnĂ©es dans une requĂȘte POST sont envoyĂ©es dans le corps de la requĂȘte HTTP, ce qui les rend invisibles dans l’URL. Cela rend les requĂȘtes POST plus adaptĂ©es pour envoyer des donnĂ©es sensibles (comme des mots de passe) ou de grandes quantitĂ©s de donnĂ©es.

Fonctionnement de POST

  • Les donnĂ©es sont envoyĂ©es dans le corps de la requĂȘte HTTP.
  • Le serveur doit analyser le corps pour accĂ©der aux donnĂ©es.
  • Dans Express, nous avons besoin d’un middleware comme express.urlencoded() ou express.json() pour analyser le corps. Il ne dĂ©crypte pas le format des donnĂ©es par dĂ©faut. Il faut lui prĂ©ciser.

Comment GĂ©rer les RequĂȘtes POST dans Express

Pour gĂ©rer les requĂȘtes POST, on doit :

  1. Utiliser le middleware express.urlencoded() pour analyser le corps de la requĂȘte.
  2. Accéder aux données en utilisant req.body.

Exemple :

import express from 'express';

const app = express();

// Middleware to parse URL-encoded bodies (from HTML forms)
app.use(express.urlencoded({ extended: true }));

// Route to handle a POST request
app.post('/submit', (req, res) => {
  const username = req.body.username; // Access the 'username' field
  const password = req.body.password; // Access the 'password' field

  // Display the retrieved parameters. 
  // In reality, the data will be processed server-side to interact with the database. 
  // ++We'll see how later.
  res.send(`Received data: Username = ${username}, Password = ${password}`);
});

Explications :

  • express.urlencoded({ extended: true }) analyse les donnĂ©es de requĂȘte encodĂ©es en URL (gĂ©nĂ©ralement envoyĂ©es par des formulaires HTML).
  • req.body contient les donnĂ©es analysĂ©es du corps de la requĂȘte.
  • Si le formulaire envoie username=john&password=123, req.body sera { username: 'john', password: '123' }.

Cas d’Utilisation pour POST :

  • Soumission de formulaires (ex. : connexion, inscription).
  • TĂ©lĂ©chargement de fichiers.
  • Envoi de donnĂ©es sensibles (puisqu’elles ne sont pas visibles dans l’URL).

📝 Exemple coomplet : GĂ©rer un Formulaire avec GET et POST

Repartons de notre projet GhibliothĂšque fil rouge de la semaine en y ajoutant un formulaire de recherche (avec GET) et un formulaire d'ajout de film (avec POST).

1ïžâƒŁ Formulaire HTML (dans un template comme form.ejs)

<!-- form.ejs -->
<!DOCTYPE html>
<html lang="fr">
<head>
  <meta charset="UTF-8">
  <title>Exemple de Formulaire</title>
</head>
<body>
  <h1>Soumettez Vos Informations</h1>

  <!-- Formulaire GET -->
  <form action="/submit-get" method="GET">
    <label for="get-username">Nom d'utilisateur (GET) :</label>
    <input type="text" id="get-username" name="username">
    <label for="get-password">Mot de passe (GET) :</label>
    <input type="password" id="get-password" name="password">
    <button type="submit">Soumettre avec GET</button>
  </form>

  <!-- Formulaire POST -->
  <form action="/submit-post" method="POST">
    <label for="post-username">Nom d'utilisateur (POST) :</label>
    <input type="text" id="post-username" name="username">
    <label for="post-password">Mot de passe (POST) :</label>
    <input type="password" id="post-password" name="password">
    <button type="submit">Soumettre avec POST</button>
  </form>
</body>
</html>

2ïžâƒŁ Routes Express pour GĂ©rer les Soumissions GET et POST

import express from 'express';

const app = express();

// Middleware pour analyser les corps encodés en URL
app.use(express.urlencoded({ extended: true }));

// Route pour afficher le formulaire
app.get('/form', (req, res) => {
  res.render('form');
});

// Route pour gérer la soumission GET du formulaire
app.get('/submit-get', (req, res) => {
  const username = req.query.username;
  const password = req.query.password;

  res.send(`Soumission GET : Nom d'utilisateur = ${username}, Mot de passe = ${password}`);
});

// Route pour gérer la soumission POST du formulaire
app.post('/submit-post', (req, res) => {
  const username = req.body.username;
  const password = req.body.password;

  res.send(`Soumission POST : Nom d'utilisateur = ${username}, Mot de passe = ${password}`);
});

app.listen(3000, () => {
  console.log('Serveur en cours d\'exécution sur http://localhost:3000');
});

Explications :

  • La route /form affiche le formulaire.
  • La route /submit-get gĂšre les soumissions GET (donnĂ©es dans l’URL).
  • La route /submit-post gĂšre les soumissions POST (donnĂ©es dans le corps de la requĂȘte).

⚠ Points Importants Ă  Retenir

  1. Sécurité GET vs POST :
  2. GET n’est pas sĂ©curisĂ© pour les donnĂ©es sensibles (comme les mots de passe) car les donnĂ©es sont visibles dans l’URL.
  3. POST est plus sĂ©curisĂ© car les donnĂ©es sont cachĂ©es dans le corps de la requĂȘte.

  4. Limites de Données :

  5. Les requĂȘtes GET ont des limites de longueur d’URL (varie selon le navigateur, gĂ©nĂ©ralement ~2000 caractĂšres).
  6. Les requĂȘtes POST peuvent gĂ©rer des quantitĂ©s de donnĂ©es plus importantes (car elles sont envoyĂ©es dans le corps).

  7. Traitement CÎté Serveur :

  8. Si le serveur ne gÚre pas les données GET ou POST, les données sont ignorées.
  9. Exemple : Si on envoie une requĂȘte GET Ă  https://example.com/?name=John mais que le serveur n’utilise pas req.query.name, le paramĂštre name est ignorĂ©.

  10. Middleware dans Express :

  11. Pour les requĂȘtes POST, on doit utiliser un middleware comme express.urlencoded() ou express.json() pour analyser le corps.
  12. Sans ce middleware, req.body sera undefined.

🚀 Ce Que J’ai Appris Aujourd’hui

  1. GET vs POST :
  2. GET envoie les donnĂ©es dans l’URL (visible, partageable, moins sĂ©curisĂ©).
  3. POST envoie les donnĂ©es dans le corps de la requĂȘte (cachĂ©, plus sĂ©curisĂ©, pas de limites de taille).

  4. Gestion de GET dans Express :

  5. Utiliser req.query pour accĂ©der aux paramĂštres d’URL.

  6. Gestion de POST dans Express :

  7. Utiliser le middleware express.urlencoded() pour analyser les données de formulaire.
  8. Accéder aux données avec req.body.

  9. Considérations de Sécurité :

  10. Ne jamais envoyer de données sensibles (comme les mots de passe) en utilisant GET.
  11. Toujours utiliser POST pour les formulaires qui soumettent des informations sensibles.

  12. L’Importance des Middlewares :

  13. Sans express.urlencoded(), les données POST ne seront pas analysées.
  14. L’ordre des middlewares est important (par exemple, express.urlencoded() doit ĂȘtre utilisĂ© avant les routes qui ont besoin de req.body).