On appelle interface homme-machine (IHM) tout ce qui permet à une personne de communiquer avec une machine : des éléments matériels que l’on touche ou que l’on regarde, et des éléments logiciels qui réagissent à nos gestes.
Prenons un pavé tactile de portable. Le doigt glisse sur le pavé (geste de l’utilisateur), le pavé mesure ce déplacement (matériel), le système d’exploitation déplace le pointeur à l’écran (logiciel), et un appui ouvre le fichier visé (logiciel). Chaque geste produit une réponse visible : c’est ce dialogue qui fait l’interface.
Une bonne IHM part toujours des besoins de celui qui l’utilise : elle doit être claire, prévisible et facile à prendre en main. Dans ce chapitre, on s’intéresse à l’IHM que tout le monde utilise chaque jour : le navigateur Web, et la façon dont il obtient les pages qu’il affiche.
Un protocole est un ensemble de règles que deux machines suivent pour se comprendre. Le protocole HTTP (Hypertext Transfer Protocol, protocole de transfert hypertexte) fixe la façon dont un client (le navigateur : Firefox, Chrome, Safari…) et un serveur Web (un programme comme Apache ou nginx, installé sur une machine connectée en permanence) échangent des messages.
Ces messages sont écrits en texte ordinaire : un humain peut les lire. Pour circuler sur le réseau, ils sont confiés aux protocoles TCP et IP, étudiés dans le chapitre sur les réseaux.
HTTP sert à presque tout ce que fait un navigateur : charger une page HTML, une image ou une feuille de style, envoyer le contenu d’un formulaire. Les robots des moteurs de recherche, qui parcourent le Web pour l’indexer, l’utilisent aussi.
Voici ce qui se passe lorsque l’on saisit l’adresse http://www.exemple.fr/cours/http.html :
www.exemple.fr ;203.0.113.5
(une adresse IP est le numéro d’une machine sur Internet, comme un numéro de téléphone) ;/cours/http.html ;Chaque échange suit donc le même schéma : une requête du client, une réponse du serveur.
Une requête commence par quelques lignes appelées en-tête. Voici celle qu’envoie le navigateur dans l’exemple précédent :
GET /cours/http.html HTTP/1.1
Host: www.exemple.fr
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 14_5) Firefox/128.0
Accept: text/html
Accept-Language: fr
Ligne par ligne :
GET est la méthode : elle dit ce que le client attend du serveur (ici, obtenir une ressource) ;/cours/http.html est le chemin de la ressource sur le serveur ;HTTP/1.1 est la version du protocole ;Host rappelle le nom de domaine visé ; il peut être suivi d’un numéro de port, qui désigne
le programme à qui s’adresse la requête sur la machine (80 par défaut pour HTTP, 443 pour HTTPS) ;User-Agent décrit le navigateur et le système ; la mention Mozilla/5.0 est un reste historique
que tous les navigateurs conservent ;Accept indique le type de contenu souhaité (ici une page HTML) ;Accept-Language indique la langue préférée de l’utilisateur.Le protocole prévoit plusieurs méthodes : GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS,
CONNECT et TRACE. Quatre suffisent pour ce chapitre :
GET demande une ressource sans la modifier ; c’est la méthode utilisée quand on clique sur un lien ;POST envoie des données au serveur pour qu’il les traite, par exemple les réponses d’un formulaire
d’inscription ;PUT dépose une ressource sur le serveur, ou remplace celle qui existe déjà ;DELETE demande la suppression d’une ressource.Le serveur répond avec un message construit sur le même modèle : une ligne de statut, un en-tête, une ligne vide, puis le corps, c’est-à-dire le contenu demandé.
HTTP/1.1 200 OK
Date: Tue, 13 Oct 2026 08:15:42 GMT
Server: nginx/1.26.2
Content-Type: text/html; charset=UTF-8
Content-Length: 182
<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Le protocole HTTP</title>
</head>
<body>
<h1>Le protocole HTTP</h1>
<p>Une requête, puis une réponse.</p>
</body>
</html>
La première ligne est la ligne de statut. Elle donne la version du protocole, puis un code de
réponse : 200 signifie que tout s’est bien passé et que la ressource est jointe. Le code le plus
connu des internautes est sans doute 404, renvoyé quand la page demandée n’existe pas. Les codes
principaux sont présentés plus bas.
Les lignes suivantes forment l’en-tête de la réponse :
Date donne l’heure de la réponse ;Server indique le logiciel serveur qui a répondu, ici nginx ;Content-Type précise la nature du contenu (une page HTML) et son codage des caractères (UTF-8) ;Content-Length donne la taille du corps en octets.Après la ligne vide vient le code HTML de la page. Le serveur ne l’affiche pas : il l’envoie tel quel, et c’est le navigateur qui l’interprète pour dessiner la page.
Le logiciel qui reçoit les requêtes et fabrique les réponses s’appelle un serveur Web. Les deux plus répandus sont nginx et Apache ; ils tournent le plus souvent sur des machines équipées d’un système GNU/Linux.
Un formulaire permet à l’utilisateur de saisir des informations et de les envoyer au serveur. Il
est délimité par la balise <form>, dont deux attributs règlent l’envoi :
action donne l’adresse du programme du serveur qui recevra les données ;method donne la méthode HTTP utilisée : get (la valeur par défaut) ou post.Chaque champ porte un attribut name : c’est ce nom, associé à la valeur saisie, que le navigateur
transmet au serveur.
<form action="/inscription" method="get">
<label for="prenom">Prénom</label>
<input type="text" id="prenom" name="prenom">
<label for="age">Âge</label>
<input type="number" id="age" name="age">
<input type="submit" value="Envoyer">
</form>
L’utilisateur saisit Leo et 16, puis clique sur le bouton.
Avec la méthode GET, les paramètres sont ajoutés à l’adresse, après un point d’interrogation,
sous la forme nom=valeur, et séparés par le caractère & :
GET /inscription?prenom=Leo&age=16 HTTP/1.1
Host: www.exemple.fr
Les paramètres restent visibles dans la barre d’adresse, dans l’historique du navigateur et dans les journaux du serveur ; l’adresse obtenue peut être mise en favori ou partagée. GET convient à une recherche ou à un filtre, qui ne modifient rien sur le serveur.
Avec la méthode POST, les mêmes paramètres voyagent dans le corps de la requête, après la ligne vide :
POST /inscription HTTP/1.1
Host: www.exemple.fr
Content-Type: application/x-www-form-urlencoded
Content-Length: 17
prenom=Leo&age=16
Ils n’apparaissent plus dans l’adresse. On emploie POST pour envoyer un mot de passe, créer un compte ou passer une commande, c’est-à-dire pour les envois qui modifient des données sur le serveur. POST ne chiffre rien pour autant : en HTTP, le corps d’une requête se lit sur le trajet aussi facilement que l’adresse. Seul HTTPS protège les données pendant leur transport.
Voici, dans l’ordre, ce qui se passe quand l’utilisateur envoie le formulaire :
Le client ne voit jamais le code du serveur : il ne reçoit que la page produite. À l’inverse, le serveur ne voit pas ce que fait le script du client : une vérification faite en JavaScript peut être contournée, et le serveur doit refaire ses propres contrôles.
HTTP ne garde aucun souvenir d’une requête à l’autre : chaque requête est traitée seule. Pour qu’un
site reconnaisse un visiteur (panier d’achat, connexion), le serveur ajoute à sa réponse un champ
Set-Cookie :
Set-Cookie: session=a3f9c2
Le navigateur mémorise ce cookie, puis le renvoie au même site dans chacune des requêtes
suivantes, dans le champ Cookie :
Cookie: session=a3f9c2
Le serveur sait ainsi que deux requêtes viennent du même visiteur. Le cookie est stocké sur le client : on peut le consulter ou l’effacer dans les réglages du navigateur.
Les messages HTTP circulent en clair : toute machine placée sur le trajet peut les lire. Le protocole HTTPS (le S signifie secure, sécurisé) ajoute une couche de chiffrement : les messages sont transformés de façon à n’être lisibles que par le client et le serveur.
Une connexion HTTPS se déroule en trois temps :
https:// ;Le certificat protège contre l’attaque de l’intermédiaire (en anglais man in the middle) : un pirate qui se ferait passer pour le site d’une banque ne pourrait pas présenter le certificat de cette banque, et le navigateur afficherait une alerte. Le chiffrement, lui, rend inutilisables les données qu’un pirate parviendrait à intercepter. Le fonctionnement des clés de chiffrement est étudié en terminale.
En pratique, avant de saisir un mot de passe ou des coordonnées bancaires, on vérifie que l’adresse
commence par https:// et que le navigateur ne signale aucun problème de certificat.
Le code de la ligne de statut tient en trois chiffres. Le premier chiffre donne la famille : 2 pour un succès, 3 pour une redirection, 4 pour une erreur du client, 5 pour une erreur du serveur.
| Code HTTP | Signification |
|---|---|
| 200 : OK | La requête a réussi ; la ressource se trouve dans le corps de la réponse. |
| 301 : Moved Permanently | La ressource a changé d’adresse définitivement ; la nouvelle adresse figure dans le champ Location. |
| 302 : Found | La ressource se trouve provisoirement à une autre adresse, indiquée dans le champ Location. |
| Code HTTP | Signification |
|---|---|
| 400 : Bad Request | La requête est mal formée : le serveur ne peut pas la comprendre. |
| 401 : Unauthorized | La ressource est protégée : il faut s’identifier (identifiant et mot de passe). |
| 403 : Forbidden | L’accès est refusé, même après identification. |
| 404 : Not Found | Aucune ressource ne correspond à l’adresse demandée. |
| 500 : Internal Server Error | Le serveur a rencontré une erreur en préparant la réponse. |
Chaque ligne d’en-tête est un champ de la forme Nom: valeur. Voici les plus courants.
| Champ HTTP | Rôle |
|---|---|
| Host | Nom de domaine visé. Une même machine peut héberger plusieurs sites : ce champ indique lequel est demandé. |
| User-Agent | Description du client : navigateur et système, ou nom du robot (par exemple Googlebot pour le robot de Google). |
| Referer | Adresse de la page sur laquelle l’utilisateur a cliqué pour arriver ici ; le site peut ainsi savoir d’où viennent ses visiteurs. |
| Cookie | Cookies que le navigateur a reçus de ce site et qu’il lui renvoie à chaque requête. |
| Champ HTTP | Rôle |
|---|---|
| Content-Type | Type de la ressource renvoyée (page HTML, image PNG, document PDF…), appelé type MIME, suivi parfois du codage : text/html; charset=UTF-8. |
| Server | Nom et parfois version du logiciel serveur. |
| Set-Cookie | Petite information (un cookie) que le navigateur garde en mémoire et renvoie au même site lors des requêtes suivantes. |
| Location | Nouvelle adresse vers laquelle le navigateur doit se diriger en cas de redirection (codes 301 et 302). |