Qu’est-ce que HTTP ?
HTTP, le HyperText Transfer Protocol, est le moyen par lequel les clients et les serveurs communiquent sur le web. Un client envoie une requête décrivant ce qu’il souhaite ; un serveur renvoie une réponse décrivant ce qui s’est produit. Chaque chargement de page, appel API, image et police de caractères transite de cette manière.
C’est un protocole simple, basé sur le texte et stateless (sans état) : chaque requête est indépendante et le serveur ne se souvient pas des précédentes, à moins qu’un élément comme un cookie ne transporte cet état. Cette simplicité est la raison pour laquelle HTTP a pu s’étendre à l’ensemble du web.
Requêtes
Une requête possède une méthode, un chemin, des headers et parfois un corps (body).
POST /api/users HTTP/2
Host: example.com
Content-Type: application/json
Accept: application/json
Authorization: Bearer <token>
{ "name": "Ada" }
La méthode définit le type d’action effectuée. Le chemin identifie la ressource. Les headers transportent des métadonnées, et le body transporte les données pour des méthodes comme POST et PUT.
| Méthode | Objectif | Safe | Idempotent |
|---|---|---|---|
| GET | Lire une ressource | Oui | Oui |
| POST | Créer ou déclencher | Non | Non |
| PUT | Remplacer une ressource | Non | Oui |
| PATCH | Mise à jour partielle | Non | Non |
| DELETE | Supprimer une ressource | Non | Oui |
Safe signifie que l’opération ne modifie pas l’état du serveur ; idempotent signifie que la répéter a le même effet que de l’exécuter une seule fois. Ces propriétés sont essentielles pour la mise en cache, les tentatives de réexécution (retries) et les proxys.
Réponses et codes de statut
Une réponse se compose d’un code de statut, de headers et d’un corps (body).
HTTP/2 201 Created
Content-Type: application/json
Location: /api/users/42
{ "id": 42, "name": "Ada" }
Le code de statut indique au client ce qu’il s’est passé. Voici les plus courants :
- 200 OK — succès.
- 201 Created — une nouvelle ressource a été créée.
- 204 No Content — succès, mais sans corps de réponse.
- 301 / 302 — redirections permanente et temporaire.
- 304 Not Modified — la copie en cache est toujours valide.
- 400 Bad Request — entrée invalide.
- 401 Unauthorized — non authentifié.
- 403 Forbidden — authentifié, mais sans autorisation.
- 404 Not Found — ressource inexistante.
- 500 Internal Server Error — erreur interne du serveur.
Renvoyer le bon code n’est pas une question de pédantisme : les clients, les caches et le monitoring en dépendent tous.
En-têtes
Les en-têtes constituent la couche de métadonnées. Les en-têtes de requête courants incluent Accept, Content-Type, Authorization, Cookie et User-Agent. Les en-têtes de réponse courants incluent Content-Type, Content-Length, Cache-Control, Set-Cookie ainsi que des en-têtes de sécurité tels que Content-Security-Policy.
// fetch.js
const res = await fetch("/api/posts", {
headers: {
Accept: "application/json",
Authorization: `Bearer ${token}`,
},
});
Les en-têtes permettent d’exprimer la négociation de contenu, l’authentification, la mise en cache et les politiques de sécurité.
Cookies et sessions
HTTP est un protocole sans état (stateless), c’est pourquoi les serveurs utilisent des cookies pour reconnaître les utilisateurs qui reviennent. Le serveur envoie Set-Cookie, et le navigateur renvoie ce cookie lors des requêtes suivantes vers la même origine.
Les cookies de session doivent toujours être :
Set-Cookie: session=abc123; HttpOnly; Secure; SameSite=Lax; Path=/
- HttpOnly empêche JavaScript de le lire, ce qui limite les risques de XSS.
- Secure garantit qu’il n’est envoyé que via HTTPS.
- SameSite limite l’envoi entre sites différents, ce qui aide à prévenir le CSRF.
Le guide de sécurité Web présente une vue d’ensemble complète.
Mise en cache
La mise en cache est la fonctionnalité HTTP la plus précieuse pour les performances. Deux mécanismes fonctionnent ensemble :
- La fraîcheur avec
Cache-Control, qui définit la durée pendant laquelle une réponse peut être réutilisée. - La validation avec
ETagouLast-Modified, qui permet au client de demander « est-ce que ceci a changé ? » et de recevoir un304 Not Modifiedlorsque ce n’est pas le cas.
# versioned assets: cache for a year
Cache-Control: public, max-age=31536000, immutable
# HTML: revalidate every time
Cache-Control: no-cache
Utilisez le fingerprinting pour vos assets avec un hash de contenu et mettez-les en cache de manière agressive ; un fichier modifié recevra un nouveau nom. Servez le HTML avec un cache court et une revalidation pour que les déploiements soient pris en compte.
HTTPS et TLS
HTTPS est du HTTP via TLS. TLS remplit trois fonctions :
- Chiffrer le trafic pour qu’il ne puisse pas être lu pendant le transit.
- Authentifier le serveur à l’aide d’un certificat.
- Préserver l’intégrité pour que les données ne puissent pas être modifiées discrètement.
Obtenez un certificat (il existe des options gratuites), redirigez tout le trafic HTTP vers HTTPS et activez le HSTS pour empêcher les navigateurs d’utiliser le HTTP non sécurisé pour votre domaine. Considérez le HTTP comme un protocole obsolète.
Versions de HTTP
- HTTP/1.1 — une seule requête à la fois par connexion, c’est pourquoi les sites avaient l’habitude de concaténer les fichiers.
- HTTP/2 — multiplexe plusieurs requêtes sur une seule connexion et compresse les headers, éliminant ainsi la plupart de ces astuces.
- HTTP/3 — s’appuie sur QUIC, un transport basé sur UDP, réduisant la latence de connexion et gérant mieux la perte de paquets.
Le service en HTTPS active généralement HTTP/2 ou HTTP/3 automatiquement via votre serveur ou votre CDN. Vous avez rarement besoin de modifier votre code.
Bonnes pratiques
- Utilisez HTTPS partout et redirigez le HTTP vers HTTPS avec HSTS.
- Renvoyez des codes de statut précis et des corps d’erreur explicites.
- Veillez à ce que les méthodes soient sûres et idempotentes, conformément à leurs définitions.
- Configurez
Cache-Controlet les validateurs de manière réfléchie. - Utilisez des cookies HttpOnly, Secure et SameSite pour les sessions.
- Configurez les headers de sécurité tels que CSP et
X-Content-Type-Options. - Privilégiez HTTP/2 ou HTTP/3 et laissez la plateforme gérer la négociation.
Erreurs courantes
- Retourner un code 200 pour des erreurs, ce qui perturbe les clients et les caches.
- Modifier des données via GET, ce qui est risqué car ces requêtes peuvent être mises en cache ou préchargées.
- Désactiver le cache pour tout, au détriment des performances.
- Stocker les jetons de session dans
localStorageau lieu d’un cookie. - Oublier de rediriger le HTTP vers le HTTPS.
- Ignorer
Content-Typeet recevoir des erreurs d’analyse (parse errors).
Et après ?
HTTP est le langage commun du web, et le maîtriser est un atout majeur. Approfondissez vos connaissances avec les fondamentaux d’internet, comprenez le DNS, effectuez des requêtes en JavaScript avec Fetch, et sécurisez votre trafic grâce au guide de sécurité web.