Mes en-têtes HTTP
À 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-Agentest 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ée | 216.73.216.15 |
|---|---|
| Méthode HTTP | GET |
| Protocole | HTTP/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. |
Aucun en-tête ne correspond à votre recherche.
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-CHest 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-Agenthistorique 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éponse | Ce qu'il protège | Exemple |
|---|---|---|
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.
- Cochez « Désactiver le cache » avant de recharger, sinon la plupart des ressources ne provoqueront aucune requête réelle.
- 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.
- Passez en mode brut si l'option existe : vous verrez alors les lignes exactes, sans le reformatage décoratif de l'interface.
- 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-Destni les mêmesAccept.
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.