Le protocole du web
HTTP (HyperText Transfer Protocol) est le protocole qu’utilise un navigateur pour demander une ressource (page, image, données…) à un serveur web : Apache, Nginx, IIS… Il fonctionne par requête / réponse : le client demande, le serveur répond, et chaque requête est indépendante des précédentes (le protocole ne garde pas d’état ; ce sont les cookies qui permettent de suivre une session).
Jusqu’à HTTP/1.1, les messages sont du texte lisible, transporté par TCP sur le port 80.
| Version | Année | Ce qu’elle apporte |
|---|---|---|
| HTTP/1.0 | 1996 | Une connexion TCP par ressource demandée |
| HTTP/1.1 | 1997, aujourd’hui RFC 9112 | Connexions persistantes, en-tête Host obligatoire (plusieurs sites sur une même adresse IP) |
| HTTP/2 | 2015, aujourd’hui RFC 9113 | Format binaire, plusieurs échanges en parallèle sur une seule connexion, en-têtes compressés |
| HTTP/3 | 2022, RFC 9114 | Transporté par QUIC, sur UDP, pour réduire les délais d’établissement |
Une requête
GET /index.html HTTP/1.1 ← méthode, ressource demandée, version
Host: neverssl.com ← site visé (obligatoire en HTTP/1.1)
User-Agent: curl/8.5.0 ← logiciel client
Accept: text/html ← formats acceptés
← ligne vide : fin des en-têtes
Les méthodes les plus utilisées :
| Méthode | Usage |
|---|---|
| GET | Obtenir une ressource |
| POST | Envoyer des données au serveur (formulaire, création d’un élément) |
| PUT / PATCH | Remplacer / modifier une ressource (API) |
| DELETE | Supprimer une ressource (API) |
| HEAD | Comme GET, mais sans le corps : seulement les en-têtes |
Une réponse
HTTP/1.1 200 OK ← version, code et message de statut
Date: Wed, 21 Oct 2026 09:58:08 GMT
Server: Apache/2.4.62 (Debian)
Content-Type: text/html; charset=UTF-8
Content-Length: 1234
← ligne vide
<!doctype html><html>…</html> ← corps : la ressource demandée
Le code de statut résume le résultat :
| Famille | Sens | Exemples |
|---|---|---|
| 1xx | Information | 101 Switching Protocols |
| 2xx | Succès | 200 OK, 201 Created, 204 No Content |
| 3xx | Redirection | 301 Moved Permanently, 302 Found, 304 Not Modified |
| 4xx | Erreur du client | 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found |
| 5xx | Erreur du serveur | 500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable |
L’encapsulation
[ Ethernet [ IP [ TCP (port 80) [ Message HTTP ] ] ] ]
Dialoguer avec un serveur sans navigateur
HTTP/1.1 étant textuel, on peut taper une requête à la main :
# Connexion brute au port 80, puis saisie de la requête
$ nc neverssl.com 80 # ou : telnet neverssl.com 80
GET / HTTP/1.1
Host: neverssl.com
# ← ligne vide pour envoyer
# Plus simple : curl affiche la requête (>) et la réponse (<)
$ curl -v http://neverssl.com/
$ curl -I https://www.debian.org/ # en-têtes seulement, en HTTPS
Le site neverssl.com est volontairement resté en HTTP, ce qui le rend pratique pour ces essais.
© 2026 Bruno Jousseaume. Ce cours est publié sous licence CC BY-NC-SA 4.0 : vous pouvez le partager et l’adapter en citant l’auteur et un lien vers cette page, sans usage commercial, et en partageant vos adaptations sous la même licence.