Partie 3 : Formulaires et requêtes HTTP
1. Les formulaires HTML
Section intitulée « 1. Les formulaires HTML »1.1 À quoi sert un formulaire ?
Section intitulée « 1.1 À quoi sert un formulaire ? »Un formulaire est un ensemble de composants graphiques (champs de saisie, boutons, listes déroulantes...) qui permet à l'utilisateur d'envoyer des données au serveur. C'est le mécanisme fondamental de l'interaction homme-machine sur le Web.
Exemples de formulaires courants : connexion à un site, inscription, barre de recherche, commentaires, commandes en ligne.
1.2 Structure d'un formulaire
Section intitulée « 1.2 Structure d'un formulaire »<form action="/traitement" method="post"> <label for="nom">Nom :</label> <input type="text" id="nom" name="nom">
<label for="email">Email :</label> <input type="email" id="email" name="email">
<button type="submit">Envoyer</button></form>Attribut de <form> | Rôle |
|---|---|
action | URL du programme serveur qui traitera les données |
method | Méthode HTTP utilisée (get ou post) |
1.3 Les types de champs de saisie
Section intitulée « 1.3 Les types de champs de saisie »Champs textuels
Section intitulée « Champs textuels »<input type="text" name="prenom" placeholder="Votre prénom"><input type="password" name="mdp" placeholder="Mot de passe"><input type="number" name="age" min="0" max="120"><input type="date" name="naissance"><input type="url" name="site"><textarea name="commentaire" rows="4" cols="50"></textarea>| Type | Affichage | Validation |
|---|---|---|
text | Champ texte libre | Aucune |
email | Champ texte | Vérifie le format email |
password | Caractères masqués | Aucune |
number | Champ numérique avec flèches | Vérifie que c'est un nombre |
date | Sélecteur de date | Format de date |
url | Champ texte | Vérifie le format URL |
<!-- Case à cocher (choix multiples) --><input type="checkbox" name="option1" value="a"> Option A<input type="checkbox" name="option2" value="b"> Option B
<!-- Bouton radio (choix unique) --><input type="radio" name="niveau" value="seconde"> Seconde<input type="radio" name="niveau" value="premiere"> Première<input type="radio" name="niveau" value="terminale"> Terminale
<!-- Liste déroulante --><select name="matiere"> <option value="nsi">NSI</option> <option value="maths">Mathématiques</option> <option value="physique">Physique</option></select><button type="submit">Envoyer</button><button type="reset">Réinitialiser</button><button type="button">Action JavaScript</button>| Type | Comportement |
|---|---|
submit | Soumet le formulaire (envoie les données) |
reset | Remet tous les champs à leur valeur initiale |
button | Aucun comportement par défaut (utilisé avec JavaScript) |
1.4 Attributs utiles des champs
Section intitulée « 1.4 Attributs utiles des champs »<input type="text" name="nom" required <!-- champ obligatoire --> placeholder="Entrez votre nom" <!-- texte indicatif --> maxlength="50" <!-- longueur maximale --> value="Alice" <!-- valeur par défaut -->>1.5 Validation côté client avec JavaScript
Section intitulée « 1.5 Validation côté client avec JavaScript »Avant d'envoyer les données au serveur, on peut vérifier leur validité en JavaScript :
<form id="inscription"> <label for="pseudo">Pseudo (3 à 20 caractères) :</label> <input type="text" id="pseudo" name="pseudo"> <span id="erreur" style="color: red;"></span> <br> <button type="submit">S'inscrire</button></form>let formulaire = document.getElementById("inscription");let champPseudo = document.getElementById("pseudo");let messageErreur = document.getElementById("erreur");
formulaire.addEventListener("submit", function(e) { let pseudo = champPseudo.value; if (pseudo.length < 3 || pseudo.length > 20) { e.preventDefault(); // empêche l'envoi du formulaire messageErreur.textContent = "Le pseudo doit contenir entre 3 et 20 caractères."; } else { messageErreur.textContent = ""; }});e.preventDefault() empêche le comportement par défaut du formulaire (l'envoi des données) pour permettre d'afficher un message d'erreur à l'utilisateur.
2. Les requêtes HTTP
Section intitulée « 2. Les requêtes HTTP »2.1 Le protocole HTTP
Section intitulée « 2.1 Le protocole HTTP »HTTP (HyperText Transfer Protocol) est le protocole de communication entre le client (navigateur) et le serveur Web. Chaque interaction suit le schéma requête → réponse.
Client Serveur │ │ │──── Requête HTTP ──────────────────►│ │ (méthode, URL, en-têtes, corps) │ │ │ │◄─── Réponse HTTP ─────────────────│ │ (code, en-têtes, corps) │2.2 Structure d'une requête HTTP
Section intitulée « 2.2 Structure d'une requête HTTP »Une requête HTTP se compose de :
- La ligne de requête : méthode + URL + version HTTP
- Les en-têtes (headers) : informations complémentaires
- Le corps (body) : les données envoyées (pour POST)
Exemple de requête GET :
GET /page.html HTTP/1.1Host: www.exemple.frAccept: text/htmlAccept-Language: frExemple de requête POST :
POST /connexion HTTP/1.1Host: www.exemple.frContent-Type: application/x-www-form-urlencoded
identifiant=alice&motdepasse=secret2.3 Structure d'une réponse HTTP
Section intitulée « 2.3 Structure d'une réponse HTTP »HTTP/1.1 200 OKContent-Type: text/html; charset=utf-8Content-Length: 1234
<!DOCTYPE html><html>...La première ligne contient le code de statut :
| Code | Signification |
|---|---|
| 200 | OK - la requête a réussi |
| 301 | Redirection permanente |
| 403 | Accès interdit (Forbidden) |
| 404 | Page non trouvée (Not Found) |
| 500 | Erreur interne du serveur |
2.4 Méthode GET
Section intitulée « 2.4 Méthode GET »La méthode GET transmet les paramètres dans l'URL, après le caractère ? :
https://www.exemple.fr/recherche?q=NSI&page=1Les paramètres sont des paires nom=valeur séparées par &.
<form action="/recherche" method="get"> <input type="text" name="q" placeholder="Rechercher..."> <button type="submit">Chercher</button></form>Si l'utilisateur tape « Python » et valide, le navigateur envoie :
GET /recherche?q=Python HTTP/1.1Caractéristiques de GET :
- Les paramètres sont visibles dans l'URL (barre d'adresse)
- L'URL peut être mise en favori ou partagée
- La taille des données est limitée (environ 2 000 caractères pour l'URL)
- Utilisé pour les lectures (recherche, consultation)
2.5 Méthode POST
Section intitulée « 2.5 Méthode POST »La méthode POST transmet les paramètres dans le corps de la requête, invisibles dans l'URL :
<form action="/connexion" method="post"> <input type="text" name="identifiant"> <input type="password" name="motdepasse"> <button type="submit">Se connecter</button></form>La requête envoyée :
POST /connexion HTTP/1.1Host: www.exemple.frContent-Type: application/x-www-form-urlencoded
identifiant=alice&motdepasse=secretCaractéristiques de POST :
- Les paramètres sont invisibles dans l'URL
- L'URL ne peut pas être mise en favori avec les données
- Pas de limite pratique de taille pour les données
- Utilisé pour les modifications (connexion, inscription, envoi de fichier)
2.6 Comparaison GET / POST
Section intitulée « 2.6 Comparaison GET / POST »| Critère | GET | POST |
|---|---|---|
| Paramètres dans... | L'URL | Le corps de la requête |
| Visibilité | Visibles dans la barre d'adresse | Non visibles dans l'URL |
| Mise en favori | Oui (URL complète) | Non |
| Taille des données | Limitée (~2 000 car.) | Pas de limite pratique |
| Usage typique | Recherche, consultation | Connexion, inscription, envoi de données |
| Sécurité | Données exposées dans l'URL | Données dans le corps (pas dans l'historique) |
3. Côté serveur : traitement des données
Section intitulée « 3. Côté serveur : traitement des données »3.1 Le rôle du serveur
Section intitulée « 3.1 Le rôle du serveur »Quand le formulaire est soumis, le serveur reçoit les données et les traite avec un programme côté serveur (en Python, PHP, JavaScript/Node.js...).
Le serveur peut :
- Stocker les données dans une base de données
- Vérifier les identifiants de connexion
- Générer une page HTML de réponse personnalisée
- Envoyer un email de confirmation
3.2 Exemple avec Python (Flask)
Section intitulée « 3.2 Exemple avec Python (Flask) »Voici un exemple simplifié de serveur Web en Python utilisant le micro-framework Flask :
from flask import Flask, request
app = Flask(__name__)
@app.route("/inscription", methods=["POST"])def inscription(): nom = request.form["nom"] email = request.form["email"] return f"<h1>Bienvenue {nom} !</h1><p>Email enregistré : {email}</p>"
app.run()Ce programme :
- Reçoit les données du formulaire via
request.form - Extrait les champs
nometemail - Renvoie une page HTML personnalisée
4. Exemple complet : formulaire de contact
Section intitulée « 4. Exemple complet : formulaire de contact »HTML (contact.html) :
<!DOCTYPE html><html lang="fr"><head> <meta charset="utf-8"> <title>Contact</title> <style> body { font-family: Arial, sans-serif; max-width: 500px; margin: 50px auto; } label { display: block; margin-top: 15px; font-weight: bold; } input, textarea, select { width: 100%; padding: 8px; margin-top: 5px; } button { margin-top: 20px; padding: 10px 30px; background: #3498db; color: white; border: none; cursor: pointer; } button:hover { background: #2980b9; } .erreur { color: red; font-size: 14px; } .succes { color: green; font-weight: bold; } </style></head><body> <h1>Formulaire de contact</h1> <form id="formContact" action="/contact" method="post"> <label for="nom">Nom :</label> <input type="text" id="nom" name="nom" required>
<label for="email">Email :</label> <input type="email" id="email" name="email" required>
<label for="sujet">Sujet :</label> <select id="sujet" name="sujet"> <option value="question">Question</option> <option value="bug">Signaler un problème</option> <option value="suggestion">Suggestion</option> </select>
<label for="message">Message :</label> <textarea id="message" name="message" rows="5" required></textarea>
<p id="feedback" class="erreur"></p> <button type="submit">Envoyer</button> </form>
<script src="contact.js"></script></body></html>JavaScript (contact.js) :
let formulaire = document.getElementById("formContact");let feedback = document.getElementById("feedback");
formulaire.addEventListener("submit", function(e) { let nom = document.getElementById("nom").value.trim(); let email = document.getElementById("email").value.trim(); let message = document.getElementById("message").value.trim();
// Validation if (nom.length < 2) { e.preventDefault(); feedback.textContent = "Le nom doit contenir au moins 2 caractères."; feedback.className = "erreur"; return; }
if (message.length < 10) { e.preventDefault(); feedback.textContent = "Le message doit contenir au moins 10 caractères."; feedback.className = "erreur"; return; }
feedback.textContent = "Formulaire valide, envoi en cours..."; feedback.className = "succes";});À retenir
Section intitulée « À retenir »- Un formulaire HTML (
<form>) permet à l'utilisateur d'envoyer des données au serveur. - Chaque champ doit avoir un attribut
namepour que sa valeur soit transmise. - Les types de champs principaux :
text,email,password,number,checkbox,radio,select. - La méthode GET transmet les paramètres dans l'URL (visible, limité, pour les lectures).
- La méthode POST transmet les paramètres dans le corps de la requête (invisible dans l'URL, pour les modifications).
- Une requête HTTP = ligne de requête + en-têtes + corps. Une réponse = code de statut + en-têtes + corps.
- Les codes de statut courants : 200 (OK), 404 (non trouvé), 500 (erreur serveur).
- La validation côté client (JavaScript) améliore l'ergonomie mais le serveur doit toujours re-valider.
e.preventDefault()empêche le comportement par défaut d'un événement (envoi de formulaire, suivi de lien...).
© 2026 Corentin Dupont - LyCode
Créé avec Astro Starlight