Définition
HTTP (HyperText Transfer Protocol) est le protocole de communication fondamental du web. Il définit comment les messages sont formates et transmis entre un client (navigateur, application) et un serveur web.
Créé par Tim Berners-Lee en 1991, HTTP est un protocole sans état (stateless) : chaque requête est indépendante, le serveur ne conserve aucune information entre les requêtes.
Anatomie d'une requête HTTP
POST /api/users HTTP/2
Host: api.exemple.com
Authorization: Bearer eyJhbGciOiJIUzI1Ni...
Content-Type: application/json
Accept: application/json
{"nom": "Alice", "email": "alice@exemple.com"}
Composants
- Méthode : GET, POST, PUT, PATCH, DELETE
- URL : le chemin de la ressource
- Headers : métadonnées (authentification, type de contenu, cache)
- Body : données envoyees (POST, PUT, PATCH)
Codes de statut HTTP
2xx — Succès
| Code |
Signification |
| 200 |
OK |
| 201 |
Created (ressource creee) |
| 204 |
No Content (succès, pas de body) |
3xx — Redirection
| Code |
Signification |
| 301 |
Moved Permanently (redirection definitive) |
| 302 |
Found (redirection temporaire) |
| 304 |
Not Modified (cache valide) |
4xx — Erreur client
| Code |
Signification |
| 400 |
Bad Request (requête mal formée) |
| 401 |
Unauthorized (non authentifie) |
| 403 |
Forbidden (pas les droits) |
| 404 |
Not Found (ressource inexistante) |
| 429 |
Too Many Requests (rate limiting) |
5xx — Erreur serveur
| Code |
Signification |
| 500 |
Internal Server Error |
| 502 |
Bad Gateway (proxy/load balancer) |
| 503 |
Service Unavailable (surcharge) |
| 504 |
Gateway Timeout |
Évolution du protocole
HTTP/1.1 (1997)
- Une requête par connexion (head-of-line blocking)
- Keep-alive pour reutiliser les connexions
- Chunked transfer encoding
HTTP/2 (2015)
- Multiplexage : plusieurs requêtes sur une seule connexion
- Compression des headers (HPACK)
- Server Push : le serveur envoie des ressources avant qu'elles soient demandées
- Nécessite HTTPS en pratique
HTTP/3 (2022)
- Base sur QUIC (UDP au lieu de TCP)
- Pas de head-of-line blocking
- Handshake plus rapide (0-RTT)
- Meilleur sur les réseaux instables (mobile)
Headers HTTP importants
| Header |
Rôle |
Exemple |
Content-Type |
Type de contenu |
application/json |
Authorization |
Authentification |
Bearer token123 |
Cache-Control |
Politique de cache |
max-age=3600 |
Accept |
Format accepte |
application/json |
CORS headers |
Cross-origin |
Access-Control-Allow-Origin |