HTTP : Le protocole qui alimente le Web — Comment ça marche
Le **Hypertext Transfer Protocol (HTTP)** est le protocole couche application qui définit comment clients (navigateurs, apps) et serveurs communiquent sur le World Wide Web. C'est le langage du web.
Modèle cœur : Requête–Réponse
HTTP suit un cycle **client-serveur, sans état, requête-réponse** :
- Client (User Agent) initie une **connexion TCP** (généralement port 80 HTTP, 443 HTTPS) vers IP serveur (résolue via DNS depuis URL).
- Client envoie requête HTTP :
GET /article/how-http-works HTTP/1.1 Host: example.com User-Agent: Mozilla/5.0 ... Accept: text/html,application/xhtml+xml Accept-Language: en-US,en;q=0.9 Cookie: session_id=abc123 - Serveur traite requête (routage handler, requête BD, rendu template, vérif auth).
- Serveur envoie réponse HTTP :
HTTP/1.1 200 OK Date: Mon, 27 May 2024 12:00:00 GMT Server: nginx/1.24.0 Content-Type: text/html; charset=UTF-8 Content-Length: 14523 Cache-Control: private, max-age=0 Set-Cookie: session_id=abc123; HttpOnly; Secure ...contenu page... - Client reçoit, parse, rend. Si HTML référence autres ressources (CSS, JS, images, polices), **nouvelles requêtes** tirées (souvent en parallèle).
- Connexion réutilisée (Keep-Alive) ou fermée.
Méthodes HTTP clés (Verbes)
| Méthode | But | Idempotente ? | Sûre ? |
|---|---|---|---|
| GET | Récupérer ressource | Oui | Oui |
| POST | Soumettre données (formulaires, API) | Non | Non |
| PUT | Remplacer ressource entièrement | Oui | Non |
| PATCH | Mise à jour partielle | Non* | Non |
| DELETE | Supprimer ressource | Oui | Non |
| HEAD | En-têtes seulement (pas corps) | Oui | Oui |
| OPTIONS | Décrire méthodes autorisées (CORS) | Oui | Oui |
Codes statut : Le résultat 3 chiffres
- 1xx Informationnel : 100 Continue
- 2xx Succès : 200 OK, 201 Created, 204 No Content
- 3xx Redirection : 301 Moved Permanently, 302 Found, 304 Not Modified (cache)
- 4xx Erreur client : 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found, 429 Too Many Requests
- 5xx Erreur serveur : 500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable, 504 Gateway Timeout
Évolution : HTTP/1.1 → HTTP/2 → HTTP/3
| Version | Année | Améliorations clés |
|---|---|---|
| HTTP/1.1 | 1997 | Connexions persistantes, encodage chunked, en-tête Host (hébergement virtuel), pipelining (défectueux) |
| HTTP/2 (h2) | 2015 | **Cadrage binaire**, **multiplexage** (flux parallèles sur 1 connexion TCP), compression en-têtes (HPACK), server push, priorisation. Nécessite TLS (h2) en pratique. |
| HTTP/3 (h3) | 2022 | **QUIC (UDP)** au lieu TCP : **handshake 0-RTT**, pas de blocage head-of-line, TLS 1.3 intégré, migration connexion (changement IP). |
HTTPS : HTTP + TLS
**Pas un protocole séparé.** HTTP sur **TLS (Transport Layer Security)**. Chiffre requête/réponse, authentifie serveur (certificat), assure intégrité. **Standard aujourd'hui** — navigateurs marquent HTTP « Non sécurisé ».
Pourquoi sans état ? Scalabilité.
Pas de mémoire session côté serveur entre requêtes. État géré via **cookies, tokens (JWT), stockage côté client, ou magasins session serveur (Redis) clé par cookie**. Permet mise à l'échelle horizontale (ajout serveurs derrière load balancer).
La simplicité, extensibilité (en-têtes, méthodes), et absence d'état d'HTTP ont permis au web de passer à milliards d'appareils. QUIC/HTTP/3 s'attaque maintenant au dernier goulot : blocage head-of-line TCP.
