Visionneuse d’en-têtes de réponse
Entrez une adresse et lisez ce que dit le serveur avant d’envoyer la page : la ligne d’état et chaque en-tête, pour chaque redirection en chemin. Une courte note à côté de chaque en-tête explique ce qu’il fait là.
La partie d’une page web que vous ne voyez jamais
Une réponse d’un serveur web est montée comme un colis. La page, c’est ce qu’il y a dans la boîte. À l’extérieur, il y a une étiquette, faite d’une première ligne avec un code d’état à trois chiffres, puis d’une liste de lignes Nom: valeur appelées en-têtes. Le navigateur lit d’abord l’étiquette et décide presque tout à partir d’elle : afficher ou télécharger, garder une copie ou non, aller ailleurs ou non, quels cookies stocker.
Vous ne voyez jamais les en-têtes à l’écran, alors beaucoup de comportements déroutants s’y cachent. Une page qui ne se met pas à jour, une redirection qui boucle, une police bloquée sur un autre domaine, une connexion qui ne tient pas. Le plus souvent, c’est un seul en-tête avec une mauvaise valeur.
Ce que fait cette visionneuse
Notre serveur envoie une seule requête GET à l’adresse que vous entrez, du même genre que celle d’un navigateur et enregistre la réponse. Si la réponse est une redirection (un état 3xx avec un en-tête Location), il demande la nouvelle adresse et l’enregistre aussi, jusqu’à huit fois. Vous obtenez un bloc par réponse, dans l’ordre, pour voir quel serveur a ajouté quel en-tête à quelle étape.
Nous cherchons chaque en-tête dans un dictionnaire de plus de 130 noms et l’affichons avec sa famille et une explication en une phrase. Les familles sont :
| Famille | En-têtes typiques | Question à laquelle ils répondent |
|---|---|---|
| Cache | Cache-Control, ETag, Age, X-Cache | Cela peut-il être stocké, pour combien de temps et est-ce un cache qui a répondu ? |
| Contenu | Content-Type, Content-Encoding, Content-Length | Que contient le corps et comment est-il emballé ? |
| Sécurité | Strict-Transport-Security, Content-Security-Policy | Quelles protections du navigateur sont activées ? |
| Cookies | Set-Cookie | Que doit retenir le navigateur ? |
| Origines multiples | Access-Control-Allow-Origin | Des scripts d’autres sites peuvent-ils lire cela ? |
| Connexion | Alt-Svc, Date, Keep-Alive | Comment la liaison avec le serveur est-elle gérée ? |
| Serveur et CDN | Server, Via, CF-RAY, X-Served-By | Quel logiciel et quel réseau ont répondu ? |
| Diagnostic | Server-Timing, X-Request-Id | Combien de temps cela a-t-il pris et comment le retrouver dans les journaux ? |
Un nom absent du dictionnaire est marqué comme en-tête personnalisé ou peu courant. N’importe quel logiciel est libre d’inventer les siens : vous verrez donc souvent cette mention et elle est sans danger. Les durées et les tailles sont converties quand c’est utile, si bien que max-age=31536000 s’affiche comme 365 jours.
Le résumé donne l’état final, la version de HTTP négociée par notre serveur, le nombre de redirections, le logiciel nommé par l’en-tête Server et le nombre d’en-têtes de la dernière réponse. Rien n’est noté ici. Si vous voulez une note, la note des en-têtes de sécurité en donne une.
Lire la ligne d’état
- 2xx : la requête a réussi.
200est le cas ordinaire. - 301 et 308 : déplacé pour de bon. Les navigateurs et les moteurs de recherche retiennent la nouvelle adresse. 302, 303 et 307 : allez là-bas pour l’instant et gardez l’adresse d’origine comme référence.
- 4xx : le serveur refuse, ou ne trouve pas ce qui a été demandé. Un
403sur une page qui s’ouvre bien dans votre navigateur veut souvent dire que le site bloque les requêtes automatisées. - 5xx : le serveur lui-même a échoué. Les codes
520à526viennent d’un CDN qui n’a pas pu joindre le serveur derrière lui.
Quatre choses qu’on vérifie avec elle
- « Pourquoi les visiteurs reçoivent-ils encore l’ancienne version ? »
- Lisez
Cache-ControletAge. Unmax-agelong sur une page HTML signifie que les navigateurs ne redemanderont rien avant son expiration. UnX-Cacheou unCF-Cache-StatusàHITsignifie que le CDN a servi sa propre copie et qu’il faut la purger. - « La compression est-elle active ? »
- Cherchez
Content-Encoding: br,gzipouzstd. Si l’en-tête manque sur une page HTML, la page voyage à taille pleine. - « D’où vient cette redirection ? »
- Comparez l’en-tête
Serverde chaque étape. Une redirection répondue par le CDN a été réglée dans son tableau de bord. Une redirection répondue par nginx ou Apache est dans la configuration du serveur. Une redirection qui porteX-Redirect-Bynomme l’application ou l’extension qui l’a émise. - « Que fait tourner ce site ? »
Server,X-Powered-ByetVianomment souvent le serveur web, le langage et le CDN. Sur votre propre site, il vaut la peine d’enlever les numéros de version de ces en-têtes.
Vous regardez les en-têtes reçus par notre serveur pour une requête anonyme. Un site peut répondre autrement à un visiteur connecté, à un navigateur mobile, à un autre pays ou à un autre Accept-Language. Les noms d’en-têtes sont affichés dans leur graphie habituelle. HTTP/2 et HTTP/3 les transmettent en minuscules, comme le fait le bloc brut et la casse n’a jamais d’importance.
Questions fréquentes
Comment voir les en-têtes de réponse dans mon propre navigateur ?
Ouvrez les outils de développement (F12, ou Cmd+Option+I sur Mac), allez dans l’onglet Réseau, rechargez la page et cliquez sur la première requête. Le panneau En-têtes montre les mêmes lignes. Cette visionneuse sert quand vous ne pouvez pas le faire : sur un téléphone, pour un lien que vous préférez ne pas ouvrir, ou pour voir la réponse donnée à un client sans cookies.
Quelle est la différence entre les en-têtes de requête et les en-têtes de réponse ?
Les en-têtes de requête partent avec la question du navigateur : quelle page, quelles langues et quels formats il accepte, quels cookies il détient. Les en-têtes de réponse reviennent du serveur avec la réponse. Cette page ne montre que les en-têtes de réponse.
Les en-têtes X- sont-ils standard ?
Le préfixe X- était une convention pour les en-têtes non officiels. Certains sont devenus universels quand même, comme X-Frame-Options et X-Content-Type-Options. La convention a été abandonnée en 2012 : les en-têtes personnalisés plus récents n’ont donc souvent aucun préfixe.
Pourquoi ai-je des en-têtes différents de ceux que montre mon navigateur ?
Parce que ce n’est pas la même requête. Les serveurs et les CDN s’adaptent à l’agent utilisateur, aux cookies, à la langue et à la position du client et une copie en cache peut porter des en-têtes produits plusieurs heures plus tôt. L’en-tête Vary liste les en-têtes de requête que le serveur prend en compte.
Dois-je cacher les en-têtes Server et X-Powered-By ?
Cacher le nom du produit change peu de chose. Retirer les numéros de version vaut en revanche les deux minutes, car les scanners automatiques s’en servent pour choisir quelles failles connues essayer. Dans nginx, utilisez server_tokens off;, dans Apache ServerTokens Prod, dans PHP expose_php = Off.
Un en-tête absent veut-il dire que quelque chose ne va pas ?
En général, non. Content-Type est le seul attendu sur presque toute réponse avec un corps. Les autres comptent selon ce que vous voulez. Sans Cache-Control, la mise en cache est laissée à l’appréciation de chaque navigateur et sans en-têtes de sécurité, les protections facultatives restent désactivées.