đ 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 :
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.queryest un objet contenant tous les paramĂštres de requĂȘte.- Si lâURL est
/search?q=express&sort=asc,req.querysera{ 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()ouexpress.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 :
- Utiliser le middleware
express.urlencoded()pour analyser le corps de la requĂȘte. - 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.bodycontient les donnĂ©es analysĂ©es du corps de la requĂȘte.- Si le formulaire envoie
username=john&password=123,req.bodysera{ 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
/formaffiche le formulaire. - La route
/submit-getgĂšre les soumissions GET (donnĂ©es dans lâURL). - La route
/submit-postgĂšre les soumissions POST (donnĂ©es dans le corps de la requĂȘte).
â ïž Points Importants Ă Retenir
- Sécurité GET vs POST :
- 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.
-
POST est plus sĂ©curisĂ© car les donnĂ©es sont cachĂ©es dans le corps de la requĂȘte.
-
Limites de Données :
- Les requĂȘtes GET ont des limites de longueur dâURL (varie selon le navigateur, gĂ©nĂ©ralement ~2000 caractĂšres).
-
Les requĂȘtes POST peuvent gĂ©rer des quantitĂ©s de donnĂ©es plus importantes (car elles sont envoyĂ©es dans le corps).
-
Traitement CÎté Serveur :
- Si le serveur ne gÚre pas les données GET ou POST, les données sont ignorées.
-
Exemple : Si on envoie une requĂȘte GET Ă
https://example.com/?name=Johnmais que le serveur nâutilise pasreq.query.name, le paramĂštrenameest ignorĂ©. -
Middleware dans Express :
- Pour les requĂȘtes POST, on doit utiliser un middleware comme
express.urlencoded()ouexpress.json()pour analyser le corps. - Sans ce middleware,
req.bodyseraundefined.
đ Ce Que Jâai Appris Aujourdâhui
- GET vs POST :
- GET envoie les donnĂ©es dans lâURL (visible, partageable, moins sĂ©curisĂ©).
-
POST envoie les donnĂ©es dans le corps de la requĂȘte (cachĂ©, plus sĂ©curisĂ©, pas de limites de taille).
-
Gestion de GET dans Express :
-
Utiliser
req.querypour accĂ©der aux paramĂštres dâURL. -
Gestion de POST dans Express :
- Utiliser le middleware
express.urlencoded()pour analyser les données de formulaire. -
Accéder aux données avec
req.body. -
Considérations de Sécurité :
- Ne jamais envoyer de données sensibles (comme les mots de passe) en utilisant GET.
-
Toujours utiliser POST pour les formulaires qui soumettent des informations sensibles.
-
LâImportance des Middlewares :
- Sans
express.urlencoded(), les donnĂ©es POST ne seront pas analysĂ©es. - Lâordre des middlewares est important (par exemple,
express.urlencoded()doit ĂȘtre utilisĂ© avant les routes qui ont besoin dereq.body).