Les en-têtes HTTP sont les lignes étiquetées envoyées avant le corps de chaque requête et réponse. Ils transportent le type de contenu, les règles de cache, les cookies, les identifiants et les politiques de sécurité. Voyez les en-têtes envoyés par n'importe quel site avec le Visualiseur d'en-têtes HTTP et évaluez les en-têtes de sécurité d'un site avec le Analyseur d'En-têtes de Sécurité.
En-têtes de requête
| En-tête | Rôle |
|---|---|
Host |
Le site demandé (obligatoire en HTTP/1.1) |
User-Agent |
Identifie le navigateur ou le programme client |
Accept |
Types de contenu que le client accepte, comme text/html ou application/json |
Accept-Language |
Langues préférées, par exemple fr-FR,fr;q=0.9,en;q=0.8 |
Accept-Encoding |
Compression comprise par le client (gzip, br) |
Authorization |
Identifiants, comme Bearer <token> ou Basic <base64> |
Cookie |
Cookies que le navigateur renvoie au site |
Content-Type |
Format du corps de la requête (application/json, multipart/form-data) |
Origin |
D'où vient une requête inter-sites ; utilisé par CORS et les contrôles CSRF |
Referer |
La page précédente (la faute d'orthographe est historique) |
If-None-Match |
N'envoie le corps que si l'ETag a changé |
Range |
Demande une partie d'un fichier, comme bytes=0-1023 |
En-têtes de réponse
| En-tête | Rôle |
|---|---|
Content-Type |
Format du corps, avec jeu de caractères pour le texte : text/html; charset=utf-8 |
Content-Length |
Taille du corps en octets |
Content-Encoding |
Compression appliquée au corps (gzip, br) |
Location |
Où aller ensuite, utilisé avec 201 et les redirections 3xx |
Set-Cookie |
Enregistre un cookie (voir les attributs ci-dessous) |
WWW-Authenticate |
Comment s'authentifier après un 401 |
Retry-After |
Quand réessayer après 429 ou 503 (secondes ou une date) |
ETag |
Étiquette de version du contenu, pour valider le cache |
Last-Modified |
Quand le contenu a changé pour la dernière fois |
Vary |
En-têtes de requête qui changent la réponse, pour que les caches gardent des copies séparées (Vary: Accept-Encoding) |
Cache-Control
| Directive | Signification |
|---|---|
max-age=<seconds> |
Valide pendant ce nombre de secondes, sans question |
s-maxage=<seconds> |
Comme max-age, mais pour les caches partagés comme les CDN |
no-cache |
Peut être stocké, mais doit être revalidé auprès du serveur avant chaque réutilisation |
no-store |
Ne jamais le stocker nulle part (données sensibles) |
public / private |
private signifie que seul le navigateur de l'utilisateur peut le garder, pas les caches partagés |
immutable |
Le fichier ne changera jamais à cette URL : inutile de revalider |
must-revalidate |
Une fois périmé, ne jamais le servir sans vérifier auprès du serveur |
stale-while-revalidate=<seconds> |
Sert la copie périmée pendant qu'une nouvelle est récupérée en arrière-plan |
Recettes courantes : les fichiers statiques à empreinte (app.3f9a1c.js) utilisent public, max-age=31536000, immutable ; les pages HTML utilisent no-cache ; les données personnelles utilisent no-store.
En-têtes de sécurité
| En-tête | Valeur typique | Rôle |
|---|---|---|
Strict-Transport-Security |
max-age=31536000; includeSubDomains |
Force les navigateurs à n'utiliser que HTTPS pour ce site |
Content-Security-Policy |
default-src 'self' |
Limite l'origine des scripts, styles et images ; la principale défense contre le XSS |
X-Content-Type-Options |
nosniff |
Empêche les navigateurs de deviner un autre type de contenu |
X-Frame-Options |
DENY or SAMEORIGIN |
Empêche l'affichage de la page dans un cadre (frame-ancestors de CSP est l'équivalent moderne) |
Referrer-Policy |
strict-origin-when-cross-origin |
Contrôle la part d'URL envoyée dans Referer |
Permissions-Policy |
camera=(), microphone=() |
Désactive les fonctions du navigateur dont la page n'a pas besoin |
Le Générateur d'en-tête CSP aide à construire une politique, et Politique de sécurité du contenu (CSP) explique contre quoi elle protège.
Attributs de cookie
Ils se définissent avec Set-Cookie: nom=valeur; Secure; HttpOnly; SameSite=Lax.
| Attribut | Signification |
|---|---|
Secure |
Envoyé uniquement via HTTPS |
HttpOnly |
Invisible pour JavaScript, ce qui limite ce qu'une attaque XSS peut voler |
SameSite=Lax | Strict | None |
Contrôle l'envoi du cookie lors des requêtes inter-sites ; Lax est une valeur par défaut raisonnable et None exige Secure |
Max-Age / Expires |
Sa durée de vie ; sans eux, il s'arrête avec la session du navigateur |
Domain / Path |
Quels hôtes et chemins le reçoivent |
En-têtes CORS
Les navigateurs empêchent une page de lire la réponse d'une autre origine, sauf si cette origine l'autorise. Au-delà d'une requête simple, le navigateur envoie d'abord une pré-vérification OPTIONS.
| En-tête | Rôle |
|---|---|
Access-Control-Allow-Origin |
Quelle origine peut lire la réponse (* pour toutes, ou une origine exacte) |
Access-Control-Allow-Methods |
Méthodes autorisées dans la réponse de pré-vérification |
Access-Control-Allow-Headers |
En-têtes de requête autorisés dans la pré-vérification |
Access-Control-Allow-Credentials |
true permet à la requête d'envoyer des cookies ; incompatible avec * |
Les noms d'en-tête ne sont pas sensibles à la casse (content-type équivaut à Content-Type), mais leurs valeurs le sont souvent. Pour les codes d'état, voyez Aide-mémoire des codes d'état HTTP.