Chapitre 5 :
Interactions Homme‑Machine sur le Web
Comprendre comment le navigateur et le serveur communiquent, comment JavaScript rend les pages interactives, et comment les formulaires transmettent des données de façon sécurisée.
Introduction
Au début du Web (années 1990), les pages étaient statiques : de simples documents HTML affichés sans aucune interaction possible. L'utilisateur consultait du contenu, c'est tout.
Aujourd'hui, le Web est dynamique et interactif : vous cliquez sur un bouton, remplissez un formulaire, recevez des suggestions en temps réel… Tout cela est rendu possible par la combinaison de plusieurs technologies travaillant ensemble :
Ce chapitre explore comment ces technologies s'articulent et comment l'utilisateur interagit avec le serveur à travers son navigateur.
Cours
(Navigateur)
(Apache, Nginx…)
données
Codes de statut HTTP
Chaque réponse du serveur contient un code numérique indiquant le résultat :
https://www.google.fr dans votre navigateur.
1. Le navigateur envoie une requête
GET / HTTP/1.1 au serveur de Google.
2. Le serveur répond avec le code
200 OK et renvoie le HTML de la page d'accueil.
3. Le navigateur interprète le HTML et affiche la page.
| Langage | Côté | Rôle | Exemple |
|---|---|---|---|
| HTML | Client | Structure et contenu de la page | <h1>, <p>, <form> |
| CSS | Client | Mise en forme, couleurs, polices | color: red; |
| JavaScript | Client | Interactivité dynamique (sans rechargement) | document.getElementById() |
| PHP | Serveur | Génération de pages HTML dynamiques, accès BDD | <?php echo "Bonjour"; ?> |
| Python | Serveur | Traitement des requêtes (Flask, Django…) | @app.route('/') |
Visualisation de l'arborescence DOM
Les attributs essentiels
| Attribut | Rôle | Exemple JS |
|---|---|---|
id |
Identifiant unique d'un élément — permet à JS de le cibler | document.getElementById("monId") |
value |
Valeur actuelle d'un champ de formulaire | document.getElementById("nom").value |
innerHTML |
Contenu HTML interne d'un élément | el.innerHTML = "<b>Texte</b>" |
Types de balises <input>
| type= | Rendu | Usage |
|---|---|---|
"text" | Champ de saisie libre | Prénom, adresse… |
"password" | Texte masqué par ●●● | Mot de passe |
"button" | Bouton cliquable | Déclencher une action JS |
"radio" | Bouton rond (choix unique) | Sélection d'une option |
"checkbox" | Case à cocher | Options multiples |
"submit" | Bouton d'envoi | Envoyer le formulaire |
JavaScript permet de lire et modifier le DOM en temps réel. Le schéma classique est :
- Récupérer l'élément via son
id - Lire ou modifier son attribut
valueouinnerHTML - Afficher le résultat dans un autre élément
// Récupérer la valeur saisie par l'utilisateur let prenom = document.getElementById('champPrenom').value; // Modifier le contenu d'un paragraphe résultat document.getElementById('zoneResultat').innerHTML = "Bonjour " + prenom + " !";
| Gestionnaire | Déclenché quand… | Exemple HTML |
|---|---|---|
onclick |
L'utilisateur clique sur l'élément | <button onclick="maFonction()"> |
onchange |
La valeur d'un champ change et perd le focus | <select onchange="filtrer()"> |
onmouseover |
La souris passe sur l'élément | <img onmouseover="zoom()"> |
onkeydown |
Une touche est pressée | <input onkeydown="check()"> |
onload |
La page a fini de se charger | <body onload="init()"> |
// Exemple : changer la couleur d'un titre au clic function changerCouleur() { let titre = document.getElementById('monTitre'); titre.style.color = 'red'; }
Lorsqu'un formulaire est soumis, le navigateur envoie les données au serveur en utilisant l'une des deux méthodes suivantes :
Méthode GET
- Les données sont ajoutées à l'URL :
?nom=Alice&age=17 - Visible dans la barre d'adresse
- Taille limitée (~2 000 caractères)
- Peut être mise en favori, partagée
- Pour les recherches et consultations
Méthode POST
- Les données sont dans le corps de la requête
- Invisible dans l'URL
- Pas de limite de taille significative
- Ne peut pas être mis en favori
- Pour les formulaires avec données sensibles
https://recherche.fr/resultats?q=javascript&page=1Les paramètres
q et page sont lisibles dans l'URL.
<form action="/login" method="post"> <input type="text" name="login"> <input type="password" name="mdp"> <input type="submit" value="Connexion"> </form>Le mot de passe n'apparaît pas dans l'URL.
Protocole HTTPS (SSL/TLS)
- HTTPS = HTTP + chiffrement SSL/TLS
- Les données échangées sont chiffrées : un intercepteur ne peut pas les lire
- Le cadenas
dans la barre d'adresse indique une connexion sécurisée
- Protège contre le phishing et l'interception de mots de passe
- Obligatoire pour tout site qui collecte des données personnelles
L'essentiel à retenir
Le Web repose sur un modèle client-serveur : le navigateur envoie une requête HTTP, le serveur envoie une réponse (code 200 = OK, 404 = introuvable…).
HTML structure la page, CSS la met en forme, JavaScript la rend interactive — tous trois s'exécutent côté client. PHP/Python traitent les données côté serveur.
Le DOM est l'arbre des éléments HTML. JavaScript accède aux éléments via document.getElementById('id') et peut modifier .value ou .innerHTML sans recharger la page.
La méthode GET transmet les données dans l'URL (visible, limité). La méthode POST les envoie dans le corps de la requête (invisible dans l'URL, adapté aux données sensibles).
HTTPS chiffre les échanges (cadenas ). Les cookies maintiennent la session mais peuvent être volés → jamais de données sensibles sur un site HTTP.
Activités interactives
QCM — Client/Serveur, GET/POST et HTTPS
3 questions · Sélectionnez une réponse par question puis validez.
1. Quelle affirmation sur le modèle client-serveur est correcte ?
2. Pour envoyer un formulaire contenant un mot de passe, quelle méthode HTTP faut-il utiliser ?
3. À quoi sert le protocole HTTPS ?
Corrigé — QCM
- Q1 → Réponse B : Le modèle client-serveur repose bien sur le client (navigateur) qui envoie une requête et le serveur qui répond. Le serveur s'exécute sur une machine distante, pas celle de l'utilisateur.
- Q2 → Réponse C : POST est obligatoire pour les mots de passe car les données ne s'affichent pas dans l'URL (contrairement à GET). Une URL contenant un mot de passe serait conservée dans l'historique du navigateur et visible par tous.
- Q3 → Réponse B : HTTPS chiffre la communication via SSL/TLS. Attention : HTTPS ne garantit pas qu'un site est légitime (un site de phishing peut aussi avoir un certificat HTTPS). Il faut toujours vérifier l'URL.
Manipulation du DOM en JavaScript
Découvrez comment JavaScript modifie la page côté client, sans rechargement.
Cette activité illustre le mécanisme onclick + getElementById + modification du DOM. Tout s'exécute dans votre navigateur.
.value), la transforme, puis met à jour l'affichage (.innerHTML). Tout se passe dans votre navigateur.
Le code JavaScript correspondant :
// Récupérer l'évènement onclick du bouton function convertirMajuscules() { // 1. Lire la valeur du champ texte via son id let texte = document.getElementById('inputTexte').value; // 2. Transformer la chaîne en majuscules let resultat = texte.toUpperCase(); // 3. Afficher le résultat dans la zone dédiée document.getElementById('zoneResultat').innerHTML = resultat; }
Explications — Manipulation du DOM
- Étape 1 — Lire :
document.getElementById('inputTexte').valuecible l'élément HTML dont l'idvaut inputTexte et lit la propriétévalue(la saisie de l'utilisateur). - Étape 2 — Traiter : La méthode JavaScript
.toUpperCase()retourne une nouvelle chaîne en majuscules. Le texte original n'est pas modifié. - Étape 3 — Afficher :
document.getElementById('zoneResultat').innerHTML = resultatinsère le texte transformé dans la zone résultat. Le DOM est mis à jour immédiatement, sans aucune requête vers le serveur. - Côté client : C'est l'essence même de JavaScript — permettre des interactions immédiates et réactives sans solliciter le serveur à chaque action.
Analyse d'un formulaire de connexion
Réfléchissez : quelle méthode HTTP ce formulaire devrait-il utiliser ?
Voici un formulaire de connexion. Examinez-le attentivement puis répondez aux questions.
Connexion à l'espace élève
Code source de ce formulaire :
<form action="/login" method="???"> <input type="text" name="login" placeholder="Identifiant"> <input type="password" name="mdp" placeholder="Mot de passe"> <input type="submit" value="Se connecter"> </form>
Question 1 : Quelle méthode HTTP devrait-on utiliser à la place de
"???" pour ce formulaire ?
/login?login=alice&mdp=monMotDePasse. Cette URL serait visible dans la barre d'adresse, conservée dans l'historique du navigateur et dans les logs du serveur. C'est une faille de sécurité grave !
Question 2 : En dehors de la méthode, quelle autre mesure de sécurité est indispensable pour ce formulaire ?
Corrigé — Analyse du formulaire
- Méthode → POST : Tout formulaire transmettant des données personnelles ou sensibles (mot de passe, numéro de carte, données médicales…) doit impérativement utiliser POST. La valeur
method="get"est le réglage par défaut si l'attribut est absent, c'est pourquoi il faut toujours le spécifier explicitement. - Protocole → HTTPS : POST seul ne suffit pas. Sans HTTPS, le contenu du corps de la requête POST circule en clair sur le réseau. Il faut le chiffrement SSL/TLS pour protéger les données en transit.
- Côté serveur : Le mot de passe ne doit jamais être stocké en clair dans la base de données — il doit être haché avec un algorithme robuste (bcrypt, argon2…). Cela sort du cadre de ce chapitre mais est fondamental en sécurité web.
- Cookie de session : Après une connexion réussie, le serveur envoie généralement un cookie de session. Ce cookie doit avoir les attributs
HttpOnly(inaccessible à JavaScript) etSecure(transmis uniquement via HTTPS).