Mes en-têtes HTTP

Par La rédaction de Mon-Adresse-IP.net·Publié le ·Mis à jour le ·

À chaque page que vous ouvrez, votre navigateur envoie au serveur une série de métadonnées : les en-têtes HTTP. Cette page affiche ce que le vôtre vient de transmettre à Mon Adresse IP.net, puis explique en-tête par en-tête à quoi chacun sert, ce qu'il révèle de vous et ce que vous pouvez y changer.

L'essentiel

  • Une requête HTTP se compose d'une ligne de requête, d'en-têtes, d'une ligne vide et parfois d'un corps. Les en-têtes sont des paires Nom: valeur.
  • Aucun en-tête n'est vérifiable : ils sont tous écrits par le client. Un serveur sérieux les traite comme des données hostiles et les échappe avant affichage.
  • Le User-Agent est en cours de démantèlement au profit des Client Hints, que le serveur doit demander explicitement.
  • Pris isolément, chaque en-tête est anodin ; assemblés, ils forment une signature souvent suffisante pour vous reconnaître sans cookie.

Les en-têtes de votre requête

Voici, sans filtre, ce que votre navigateur vient d'envoyer. Les noms sont normalisés par PHP ; les valeurs sont affichées telles quelles, après échappement.

Adresse IP détectée216.73.216.15
Méthode HTTPGET
ProtocoleHTTP/1.1
Accept */*
Accept-Encoding gzip, br, zstd, deflate
Host mon-adresse-ip.net
Remote-Ip 216.73.216.15
User-Agent Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
X-Forwarded-For 216.73.216.15
X-Forwarded-Proto https
X-Ovhrequest-Id 9caae02e44bf2e1717aef846d95662e4
X-Predictor 1

Cette liste varie selon le navigateur, le système, l'origine de votre clic et la présence éventuelle d'un relais sur le trajet. Rechargez la page depuis un autre appareil : la comparaison est souvent plus parlante qu'un long discours.

Ce qu'est un en-tête HTTP

Une requête HTTP est un message texte structuré en trois parties. La première ligne, dite ligne de requête, contient la méthode (GET, POST, HEAD…), la cible demandée et la version du protocole. Viennent ensuite les en-têtes, une par ligne, sous la forme Nom: valeur. Une ligne vide referme le bloc, puis vient éventuellement un corps : le contenu d'un formulaire, un fichier téléversé, un document JSON. Une requête de simple consultation n'a pas de corps : c'est pourquoi vous ne voyez ci-dessus ni Content-Type ni Content-Length.

Concrètement, une requête vers cette page ressemble à ceci :

GET /mes-en-tetes-http.php HTTP/1.1
Host: mon-adresse-ip.net
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/0.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: fr-FR,fr;q=0.9,en-US;q=0.8
Accept-Encoding: gzip, deflate, br, zstd
Connection: keep-alive
# ligne vide : fin des en-têtes, début du corps (absent pour un GET)

Ces métadonnées existent pour une raison simple : le protocole HTTP est sans état. Le serveur ne se souvient de rien d'une requête à l'autre. Chaque message doit donc porter lui-même tout ce qui est nécessaire pour être traité correctement : quel site est visé, dans quelle langue répondre, quelle compression le client sait décoder, quelle version du document il possède déjà en cache. Sans en-têtes, il faudrait un serveur par site, une seule langue par serveur et un rechargement complet de chaque image à chaque visite.

Le serveur en fait quatre usages principaux. Il route la requête grâce à Host, ce qui permet d'héberger des centaines de sites derrière une seule adresse IP : voyez notre guide du DNS pour comprendre comment le nom de domaine arrive jusque-là. Il négocie la représentation à renvoyer à partir des en-têtes Accept-*. Il optimise en renvoyant un code 304 plutôt que le document entier quand le cache du client est encore valable ; notre référence des codes de statut HTTP détaille ce dialogue. Enfin il sécurise, en vérifiant l'origine d'une requête ou en exigeant une authentification.

Deux précisions techniques utiles. D'abord, les noms d'en-têtes sont insensibles à la casse en HTTP/1.1 : user-agent et User-Agent désignent le même champ. En HTTP/2 et HTTP/3, ils sont obligatoirement en minuscules et compressés en binaire : le tableau ci-dessus est donc une reconstitution lisible, pas les octets réellement transmis. Ensuite, PHP expose les en-têtes dans $_SERVER en majuscules, préfixés par HTTP_ et avec les tirets convertis en tirets bas. Conséquence peu connue : un client peut envoyer X_Forwarded_For avec des tirets bas pour tenter de se confondre avec le véritable X-Forwarded-For. C'est l'une des raisons pour lesquelles ces valeurs ne doivent jamais être crues sur parole.

Le dictionnaire des en-têtes de requête

Voici les en-têtes que l'on rencontre réellement dans le trafic d'un navigateur moderne. Filtrez par mot-clé ou par catégorie : identité pour ce qui vous désigne, contenu pour la négociation de format, cache pour les revalidations, sécurité pour les signaux de protection, proxy pour les en-têtes d'intermédiaires, hints pour les Client Hints.

Nom Rôle Exemple de valeur Ce qu'il révèle sur vous
Host Nom de domaine visé ; obligatoire en HTTP/1.1, il permet à un serveur d'héberger de nombreux sites sur une même adresse IP. mon-adresse-ip.net Rien sur vous, tout sur votre destination. Son absence provoque une réponse 400.
User-Agent Chaîne d'identification du logiciel client : moteur, navigateur, version, plateforme. Mozilla/5.0 (X11; Linux x86_64) … Firefox/128.0 Beaucoup : famille de navigateur, système, parfois modèle d'appareil. Une version rare vous isole immédiatement.
Accept Types de médias acceptés, classés par facteur de qualité q décroissant. text/html,…,image/avif,image/webp,*/*;q=0.8 La liste exacte des formats d'image supportés date votre navigateur à quelques versions près.
Accept-Language Langues préférées, également pondérées par q. Sert à choisir la version linguistique d'une page. fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7 Votre langue, votre variante régionale, et souvent votre pays réel : même derrière un VPN étranger.
Accept-Encoding Algorithmes de compression que le client sait décoder. gzip, deflate, br, zstd Peu de choses, mais la présence de zstd indique un navigateur Chromium récent.
Accept-Charset Jeux de caractères acceptés. Déclaré obsolète : UTF-8 s'est imposé partout. utf-8, iso-8859-1;q=0.5 Sa seule présence trahit un client non standard : script, robot ou bibliothèque HTTP.
Referer Page depuis laquelle le lien a été suivi. Le nom conserve la faute d'orthographe de la spécification d'origine. https://mon-adresse-ip.net/outils.php Votre parcours de navigation. Les navigateurs récents le tronquent à l'origine seule lorsqu'on change de site.
Origin Origine (schéma, hôte, port) à l'initiative de la requête, sans le chemin. Base des contrôles CORS. https://mon-adresse-ip.net Moins que Referer : le chemin de la page n'est jamais transmis, par conception.
Cookie Renvoie au serveur les cookies qu'il avait posés pour ce domaine, sous forme de paires nom/valeur. theme=dark; sid=8f2c… Le plus direct des identifiants : un cookie stable vous relie à toutes vos visites précédentes.
Connection Gestion de la connexion TCP : la garder ouverte ou la fermer. Interdit en HTTP/2 et HTTP/3. keep-alive Rien de personnel. Sa présence indique une connexion HTTP/1.1.
Keep-Alive Paramètres souhaités pour la connexion persistante : durée d'inactivité, nombre de requêtes. timeout=5, max=1000 Rien ; il est surtout émis par des clients programmatiques et des intermédiaires.
Cache-Control Consignes de cache du client vers le serveur et les relais. no-cache, max-age=0 Un no-cache signale généralement un rechargement forcé, donc une action délibérée de votre part.
Pragma Vestige de HTTP/1.0 conservé pour compatibilité. Seule la valeur no-cache a un sens. no-cache Rien. Sa présence indique surtout un client ou un proxy prudent.
If-Modified-Since Requête conditionnelle sur la date : « envoie-moi le document seulement s'il a changé depuis cette date ». Wed, 21 Aug 2026 07:28:00 GMT La date de votre dernière visite de cette ressource précise.
If-None-Match Même principe, mais sur l'empreinte ETag de la ressource. Réponse typique : 304. "a3f1-6c2b9" Beaucoup plus qu'il n'y paraît : un ETag unique peut servir d'identifiant persistant déguisé.
Range Demande une portion d'une ressource. Base de la reprise de téléchargement et du streaming vidéo. bytes=1048576-2097151 Votre position de lecture dans une vidéo ou l'avancement d'un téléchargement interrompu.
Authorization Porte les identifiants d'authentification : Basic, Bearer, Digest. Bearer eyJhbGciOi… Votre identité applicative. En Basic, le couple identifiant/mot de passe est simplement encodé en base64, pas chiffré.
Proxy-Authorization Identifiants destinés au proxy lui-même, en réponse à un code 407. Ne doit pas être relayé au-delà. Basic dXRpbGlzYX… Que vous passez par un relais authentifié : entreprise, université, service de proxy.
Content-Type Format du corps envoyé. N'apparaît que sur les requêtes qui en ont un. application/x-www-form-urlencoded La nature de ce que vous envoyez : formulaire, fichier (multipart/form-data), appel JSON.
Content-Length Taille exacte du corps, en octets. 348 Le volume de ce que vous transmettez ; sur un formulaire, une indication grossière de sa longueur.
DNT Signal historique « Do Not Track ». Sa normalisation a été abandonnée. 1 Paradoxalement, il vous distingue : peu d'internautes l'activent, ce qui en fait un bit d'empreinte.
Sec-GPC Signal « Global Privacy Control » : refus de la vente et du partage de vos données. 1 Même remarque que DNT, mais il a une portée juridique réelle dans plusieurs États américains.
Upgrade-Insecure-Requests Indique que le client préfère une version chiffrée de la ressource et sait gérer une redirection vers HTTPS. 1 Rien : il est envoyé par tous les navigateurs sur les navigations de premier niveau.
Sec-Fetch-Site Relation entre l'origine de la page et celle de la requête. Le serveur peut ainsi refuser les requêtes venues d'ailleurs. same-origin, cross-site, none Si vous avez cliqué depuis un autre site ou saisi l'adresse vous-même (none).
Sec-Fetch-Mode Mode de la requête tel que défini par la spécification Fetch. navigate, cors, no-cors S'il s'agit d'une navigation de page ou d'un appel en arrière-plan.
Sec-Fetch-Dest Destination de la ressource demandée ; permet de bloquer une image servie comme script. document, image, script, font Le type d'élément que la page est en train de charger.
Sec-Fetch-User Présent uniquement lorsque la navigation résulte d'une action explicite de l'utilisateur. ?1 Que vous avez réellement cliqué, par opposition à une redirection automatique.
Sec-CH-UA Marques et versions majeures du navigateur, en Client Hint à faible entropie. "Chromium";v="140", "Not?A_Brand";v="24" La famille et la version majeure. La marque fantaisiste est volontaire : elle empêche les serveurs de figer des tests.
Sec-CH-UA-Mobile Indique si le client se considère comme mobile. ?0 ou ?1 Un seul bit : mobile ou non.
Sec-CH-UA-Platform Système d'exploitation, sans numéro de version. "Windows", "Android", "macOS" Votre système, rien de plus. Les versions relèvent des hints à entropie élevée.
Sec-CH-UA-Platform-Version Version du système. Hint à entropie élevée : envoyé seulement si le site le demande. "15.0.0" Une version précise réduit fortement le nombre d'internautes qui vous ressemblent.
Sec-CH-UA-Model Modèle d'appareil mobile, également à entropie élevée. "Pixel 8" Beaucoup : un modèle peu répandu combiné à une IP suffit souvent à vous singulariser.
Sec-Purpose Signale une requête anticipée : préchargement ou prérendu, pas une consultation réelle. prefetch Rien : au contraire, il prévient le serveur que vous n'avez peut-être jamais ouvert la page.
X-Forwarded-For Chaîne des adresses IP traversées, ajoutée par les relais. Convention de fait, jamais normalisée. 203.0.113.7, 198.51.100.42 Potentiellement votre IP d'origine derrière un proxy, mais la valeur est entièrement falsifiable.
X-Forwarded-Proto Protocole d'origine (http ou https) avant le passage par un répartiteur de charge. https Rien sur vous ; il évite au serveur d'arrière-plan de croire la connexion en clair.
X-Real-IP Variante à valeur unique de X-Forwarded-For, popularisée par certains serveurs mandataires. 203.0.113.7 Même réserve : n'a de valeur que s'il provient d'un relais que vous contrôlez.
X-Requested-With Convention de bibliothèques JavaScript pour marquer les appels asynchrones. Sur Android, le composant web y place le nom du paquet de l'application. XMLHttpRequest, com.exemple.appli Sur mobile, l'application exacte depuis laquelle la page est ouverte.
Via Liste des relais traversés, avec version de protocole et pseudonyme. Normalisé, contrairement aux en-têtes X-. 1.1 proxy-interne (squid/6.6) L'existence d'un proxy, parfois son logiciel et sa version.
Forwarded Successeur normalisé de X-Forwarded-*, avec des paramètres nommés for, by, proto, host. for=203.0.113.7;proto=https La même chose que X-Forwarded-For, avec la même absence de garantie.
TE Codages de transfert acceptés sur le tronçon courant, par exemple les trailers. trailers Rien ; c'est un détail de transport entre deux nœuds voisins.
Priority Priorité souhaitée pour la ressource : urgence de 0 à 7 et livraison incrémentale. u=1, i Rien de personnel : il exprime l'ordre d'affichage voulu par le navigateur.
Save-Data Demande une version allégée du site : images plus compressées, vidéos non préchargées. on Que vous avez activé une économie de données, donc probablement un forfait limité ou un réseau lent.

Les noms qui commencent par Sec- forment une catégorie à part : ils sont protégés, c'est-à-dire qu'un script de page n'a pas le droit de les créer ni de les modifier. Le navigateur en garde le contrôle exclusif, ce qui permet au serveur de leur accorder plus de confiance qu'aux autres. À l'inverse, les noms préfixés par X- sont des conventions historiques : personne ne les garantit. Le glossaire du site reprend les termes techniques employés ici.

Les en-têtes qui trahissent un proxy ou un VPN

Quand une requête traverse un relais (proxy d'entreprise, répartiteur de charge, réseau de diffusion de contenu), l'adresse IP que voit le serveur final est celle du relais, pas la vôtre. Pour ne pas perdre l'information d'origine, les intermédiaires ajoutent des en-têtes dédiés. Trois comptent vraiment.

X-Forwarded-For est le plus répandu. Chaque relais y ajoute, séparée par une virgule, l'adresse du client dont il a reçu la requête. La chaîne se lit de gauche à droite : le premier élément est censé être le client initial, les suivants les relais successifs. Via, normalisé par la spécification HTTP, décrit les intermédiaires eux-mêmes plutôt que les clients : version de protocole, pseudonyme, parfois logiciel. Forwarded est le remplaçant officiel des en-têtes X-Forwarded-* : une syntaxe unique à paramètres nommés qui évite d'avoir à combiner trois en-têtes distincts. Il reste minoritaire, l'habitude ayant fait loi.

Aucune de ces valeurs n'est fiable : et il est essentiel de comprendre pourquoi. Un en-tête HTTP est écrit par l'émetteur de la requête. Rien n'empêche un client d'envoyer lui-même X-Forwarded-For: 8.8.8.8 avant même de rencontrer le moindre relais : le serveur recevra cette valeur inventée exactement comme il recevrait celle d'un vrai proxy. Un serveur ne peut donc accorder de crédit qu'aux entrées ajoutées par des relais qu'il contrôle, en partant de la droite de la chaîne et en s'arrêtant au premier maillon inconnu.

Cette règle a deux conséquences pratiques. Côté éditeur, il ne faut jamais fonder un contrôle d'accès, une limitation de débit ou un journal probant sur un X-Forwarded-For brut : c'est un contournement d'authentification classique. Côté visiteur, ces en-têtes ne prouvent rien non plus de votre côté : leur absence ne signifie pas que vous n'utilisez pas de relais, et leur présence peut être un artefact de votre opérateur ou de votre entreprise. Notre guide des proxys détaille les différences entre proxys transparents, anonymes et élite précisément sur ce critère.

C'est aussi pour cette raison que ce site échappe systématiquement chaque valeur avant de l'afficher. Un en-tête n'est qu'une chaîne arbitraire fournie par le client : sans échappement, un visiteur pourrait y glisser du code et le voir exécuté dans le navigateur d'un autre. La fonction h() employée dans le tableau du haut neutralise ce risque, et nous l'appliquons partout, sans exception. Notre page méthodologie explique comment nous traitons ces données côté serveur, et la politique de confidentialité précise ce que nous en conservons.

User-Agent et Client Hints

Le User-Agent est l'en-tête le plus lu et le plus mal compris. Sa forme actuelle est le produit d'une course à l'imitation vieille de trente ans. Netscape, dont le nom de code interne était « Mozilla », annonçait Mozilla/2.0. Des serveurs se sont mis à réserver les pages riches aux clients dont la chaîne commençait par ce mot. Internet Explorer a donc annoncé Mozilla/4.0 (compatible; MSIE 4.0) pour ne pas être privé de contenu. Safari, bâti sur KHTML, a ajouté like Gecko pour bénéficier des mêmes traitements que Firefox. Chrome a ensuite cumulé les mentions AppleWebKit, KHTML, like Gecko, Chrome et Safari dans une seule chaîne. Résultat : tous les navigateurs commencent aujourd'hui par Mozilla/5.0, mention devenue strictement décorative.

Cette chaîne pose deux problèmes. Elle est illisible pour les serveurs, qui doivent recourir à des expressions régulières fragiles pour en extraire quoi que ce soit. Et elle est trop précise : numéro de version complet, version exacte du système, modèle d'appareil sur mobile. Autant d'éléments qui, combinés, réduisent drastiquement le nombre d'internautes qui vous ressemblent.

La réponse des éditeurs de navigateurs a été double. D'abord une réduction progressive du contenu de l'en-tête. Les navigateurs Chromium gèlent désormais les chiffres qui suivaient la version majeure (d'où les 0.0.0 que l'on voit apparaître) figent la version du système annoncée et remplacent, sur Android, le modèle d'appareil par une lettre unique. Deux appareils très différents peuvent donc envoyer aujourd'hui un User-Agent identique.

Ensuite, le remplacement par les Client Hints, un mécanisme de négociation. Le principe inverse celui du User-Agent : au lieu de tout envoyer d'emblée, le navigateur ne transmet par défaut que trois indices à faible entropie (Sec-CH-UA, Sec-CH-UA-Mobile, Sec-CH-UA-Platform). Un serveur qui a besoin de plus doit le demander explicitement, via un en-tête de réponse Accept-CH ; le navigateur enverra alors les indices supplémentaires (version du système, modèle, architecture) aux requêtes suivantes.

Ce que les Client Hints améliorent

  • Les données précises ne partent plus par défaut : il faut les réclamer.
  • La demande est visible : Accept-CH est observable dans l'onglet Réseau, et se prête à des mesures.
  • Les valeurs sont structurées, donc exploitables sans analyse hasardeuse de chaîne.
  • Le préfixe Sec- empêche un script de page de les falsifier.

Ce qu'ils ne règlent pas

  • La demande est automatiquement satisfaite : aucune permission ne vous est demandée.
  • Un traqueur présent sur des milliers de sites peut les réclamer partout, donc obtenir autant qu'avant.
  • Le mécanisme est essentiellement propre aux navigateurs Chromium ; Firefox et Safari ne l'ont pas adopté.
  • Le User-Agent historique continue d'être envoyé en parallèle.

Pour le pistage, le bilan est donc nuancé. Les acteurs mineurs perdent un accès gratuit à des informations détaillées ; les grandes régies, elles, les demandent simplement. Notre outil empreinte de mon navigateur montre les valeurs effectivement exposées par votre configuration.

Do Not Track et Global Privacy Control

DNT est né au début des années 2010 d'une idée simple : un bit unique, envoyé à tous les sites, exprimant le refus d'être suivi. Les navigateurs l'ont implémenté rapidement. La suite a été moins heureuse : aucun texte n'obligeait qui que ce soit à en tenir compte, et les discussions de normalisation se sont enlisées avant d'être officiellement abandonnées à la fin de la décennie, faute de consensus sur ce que « ne pas suivre » signifiait exactement.

L'échec a produit un effet pervers documenté : comme une minorité d'internautes activaient l'option, l'envoi de DNT: 1 devenait lui-même un signal distinctif, donc un bit supplémentaire d'empreinte. Certains navigateurs ont retiré l'option de leurs préférences pour cette raison. Un signal qui n'est respecté par personne mais qui vous distingue de tout le monde est pire qu'inutile.

Sec-GPC reprend la même forme (un bit, une valeur 1) avec une différence décisive : il ne demande pas une faveur, il exprime un droit prévu par la loi. Aux États-Unis, plusieurs lois d'États sur la vie privée imposent aux entreprises de reconnaître un signal automatisé de refus de vente ou de partage des données personnelles ; l'autorité californienne a considéré qu'ignorer ce signal constituait un manquement, ce qui a donné à Sec-GPC une force qui a toujours manqué à DNT.

En Europe, la situation est différente et souvent mal expliquée. Le RGPD et la directive ePrivacy reposent sur un consentement préalable : en principe, rien ne doit être déposé ni partagé avant que vous ne l'ayez accepté, ce qui rend théoriquement superflu un signal de refus. Aucun texte européen ne rend aujourd'hui Sec-GPC juridiquement opposable, même si l'idée d'un mécanisme automatisé d'expression du choix revient régulièrement dans les débats sur la réforme d'ePrivacy. Le laisser activé ne coûte rien et peut servir ; en attendre une protection automatique en France serait une erreur. Notre page adresse IP et RGPD replace ces signaux dans le cadre juridique applicable.

Ce que ces en-têtes disent de vous

Pris un par un, ces champs sont banals. Des millions de personnes utilisent le même navigateur que vous ; des dizaines de millions de francophones envoient le même Accept-Language. C'est la combinaison qui pose problème. Chaque valeur retire une part d'incertitude, et le produit de ces réductions successives converge vite vers un groupe très restreint.

Un exemple concret : un Accept-Language configuré sur fr-FR,br;q=0.8, une plateforme peu répandue, une version de navigateur qui n'est plus tout à fait la dernière, un Save-Data: on et un DNT: 1. Aucune de ces valeurs n'est identifiante ; leur assemblage l'est presque. Et ces en-têtes ne sont que la partie visible côté serveur : le JavaScript de la page peut y ajouter la résolution d'écran, le fuseau horaire, la liste des polices installées, le rendu graphique. Notre guide de l'empreinte du navigateur décrit ces techniques et les défenses réalistes, et l'outil empreinte de mon navigateur calcule ce que votre configuration expose.

Deux idées reçues méritent d'être corrigées. La première : « mon VPN me protège ». Il masque votre adresse IP, pas vos en-têtes, qui sont générés à l'intérieur du tunnel. Une IP annoncée en Roumanie accompagnée d'un Accept-Language: fr-FR constitue même une incohérence remarquable. La seconde : « la navigation privée efface tout ». Elle isole les cookies et l'historique locaux, mais envoie exactement les mêmes en-têtes que la fenêtre normale. Ajoutez-y les fuites possibles au niveau du navigateur, que notre test de fuite WebRTC met en évidence, et l'on comprend que la protection tient à un ensemble cohérent de réglages, jamais à un outil unique.

Ce qui aide vraiment : utiliser un navigateur très répandu dans sa configuration par défaut, sans extensions exotiques : le but est de ressembler à la foule, pas de se singulariser. Multiplier les réglages « anti-pistage » produit souvent l'effet inverse en créant une combinaison unique.

Les en-têtes de réponse à connaître

La conversation est symétrique : le serveur répond lui aussi avec des en-têtes. Certains ne servent qu'à la mise en cache, d'autres constituent le principal dispositif de sécurité d'un site moderne. Voici ceux qu'il faut savoir lire.

En-tête de réponseCe qu'il protègeExemple
Content-Security-Policy Déclare les seules sources autorisées pour les scripts, styles, images et cadres. C'est la défense la plus efficace contre l'injection de code dans une page. default-src 'self'; frame-ancestors 'none'
Strict-Transport-Security Impose HTTPS pour toutes les visites suivantes pendant la durée indiquée, y compris si l'on tape l'adresse sans https. Bloque la rétrogradation vers une connexion en clair. max-age=31536000; includeSubDomains
X-Content-Type-Options Interdit au navigateur de deviner le type d'un fichier : un document téléversé ne pourra pas être réinterprété comme un script exécutable. nosniff
X-Frame-Options Empêche l'inclusion de la page dans un cadre sur un autre site, technique de base du détournement de clic. Remplacé par la directive frame-ancestors. DENY
Referrer-Policy Contrôle la quantité d'information transmise dans Referer vers les sites externes. La valeur par défaut des navigateurs récents ne transmet plus que l'origine hors du site. strict-origin-when-cross-origin
Permissions-Policy Désactive des fonctionnalités du navigateur pour la page et les cadres qu'elle contient : caméra, micro, géolocalisation, capteurs. geolocation=(), camera=()
Set-Cookie Dépose un cookie. Ses attributs font tout : Secure le réserve à HTTPS, HttpOnly le rend invisible au JavaScript, SameSite limite son envoi depuis d'autres sites. sid=…; Secure; HttpOnly; SameSite=Lax

Ces en-têtes s'accompagnent des codes de statut : un 403 renvoyé après un Origin inattendu, un 304 déclenché par If-None-Match, un 206 en réponse à un Range. Notre référence des codes de statut HTTP les recense un par un avec leurs causes probables.

Voir les en-têtes soi-même

Le tableau du haut vous montre vos propres en-têtes de requête. Pour observer ceux d'un autre site, ou pour vérifier ce qu'un serveur renvoie, deux outils suffisent.

La ligne de commande. curl est présent nativement sur Windows 10 et 11, macOS et la plupart des distributions Linux. L'option -v affiche le dialogue complet : les lignes préfixées par > sont ce que vous envoyez, celles préfixées par < ce que le serveur répond.

curl -v https://mon-adresse-ip.net/ # dialogue complet, requête et réponse
curl -I https://mon-adresse-ip.net/ # méthode HEAD : en-têtes de réponse seuls, sans le corps

# Simuler un autre navigateur ou une autre langue :
curl -H "Accept-Language: de-DE" -I https://mon-adresse-ip.net/
curl -A "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X)" -I https://mon-adresse-ip.net/

# Suivre les redirections et n'afficher que les en-têtes de réponse :
curl -sL -D - -o /dev/null https://mon-adresse-ip.net/

Deux avertissements utiles. curl -I envoie une requête HEAD : certains serveurs y répondent différemment d'un GET, ce qui explique des écarts déroutants. Et curl n'est pas un navigateur : il n'envoie ni Client Hints, ni en-têtes Sec-Fetch-*, ni cookies. Comparer sa sortie à ce que fait Firefox ou Chrome est d'ailleurs le meilleur moyen de mesurer tout ce qu'un navigateur ajoute spontanément.

L'onglet Réseau du navigateur. Ouvrez les outils de développement avec F12 (ou Ctrl+Maj+I, Cmd+Option+I sur macOS), placez-vous sur l'onglet Réseau, rechargez la page, puis cliquez sur la première ligne de la liste.

  1. Cochez « Désactiver le cache » avant de recharger, sinon la plupart des ressources ne provoqueront aucune requête réelle.
  2. Ouvrez le panneau « En-têtes » de la requête sélectionnée : il sépare les en-têtes de réponse et les en-têtes de requête.
  3. Passez en mode brut si l'option existe : vous verrez alors les lignes exactes, sans le reformatage décoratif de l'interface.
  4. Comparez plusieurs requêtes de la même page : le document, une image et un appel en arrière-plan n'envoient pas les mêmes Sec-Fetch-Dest ni les mêmes Accept.

Ce réflexe sert bien au-delà de la curiosité : il permet de diagnostiquer une image qui ne se met pas à jour (un problème de cache), un formulaire refusé (un Origin ou un cookie SameSite), ou une ressource bloquée par une politique de sécurité. Pour analyser une adresse IP croisée dans ces échanges, notre outil de recherche d'adresse IP prend le relais ; pour les en-têtes d'un message électronique, qui obéissent à une logique différente, voyez l'analyseur d'en-têtes d'e-mail.

Questions fréquentes

Puis-je empêcher mon navigateur d'envoyer ces en-têtes ?

Non, pas les en-têtes essentiels : sans Host, le serveur ne sait pas quel site vous demandez, et sans Accept-Encoding vous perdez la compression. Vous pouvez en revanche réduire les plus bavards : limiter Referer avec un navigateur strict, refuser les cookies tiers, désactiver les Client Hints à entropie élevée. Le test d'empreinte vous montre ce qui reste visible.

Un VPN change-t-il mes en-têtes HTTP ?

Non. Un VPN chiffre le transport et remplace votre adresse IP publique, mais les en-têtes sont produits par le navigateur, à l'intérieur du tunnel. Votre User-Agent, votre Accept-Language et vos Client Hints restent identiques. C'est la contradiction classique : une IP située à Francfort accompagnée d'un Accept-Language: fr-FR se remarque immédiatement.

Pourquoi mon User-Agent commence-t-il par « Mozilla/5.0 » alors que je n'utilise pas Firefox ?

Par héritage. Dans les années 1990, des serveurs réservaient les pages riches aux navigateurs qui se déclaraient « Mozilla », nom de code de Netscape. Chaque navigateur suivant a copié ce préfixe pour ne pas être dégradé, puis les suivants ont copié les copies. Tous les navigateurs de bureau et mobiles annoncent aujourd'hui Mozilla/5.0, y compris Chrome, Edge et Safari.

L'en-tête X-Forwarded-For prouve-t-il que quelqu'un utilise un proxy ?

Non, et c'est un point capital. X-Forwarded-For est ajouté par les intermédiaires, mais rien n'empêche un client d'en fabriquer un de toutes pièces avant même le premier relais. Un serveur ne doit accorder de crédit qu'aux valeurs ajoutées par ses propres proxys de confiance. Voir notre méthodologie et le guide des proxys.

Un site voit-il les en-têtes que j'envoie aux autres sites ?

Non. Les en-têtes sont calculés pour chaque requête et n'accompagnent que celle-ci. En revanche, une même régie publicitaire présente sur des milliers de sites reçoit ses propres requêtes depuis chacun d'eux et peut donc rapprocher les visites, cookie ou pas cookie : c'est le mécanisme décrit dans notre guide de l'empreinte du navigateur.

Les en-têtes HTTP sont-ils des données personnelles au sens du RGPD ?

Une adresse IP l'est, la CNIL et la Cour de justice de l'Union européenne le rappellent régulièrement. Les autres en-têtes le deviennent dès qu'ils permettent, seuls ou combinés, de singulariser une personne  : ce qui est précisément l'objet du fingerprinting. Notre page IP et RGPD détaille les conséquences pratiques pour un éditeur de site.