Analyseur d’en-têtes HTTP — en-têtes de requête et de réponse, décodés ligne par ligne
Analyseur d’en-têtes HTTP
Collez une requête ou une réponse HTTP complète — le bloc qu’affiche curl -v, ou ce que montre le panneau Réseau du navigateur — et chaque ligne d’en-tête est décodée : le nom, la valeur, une phrase en français clair sur son rôle, et le document qui la définit. Set-Cookie est décomposé attribut par attribut (Secure, HttpOnly, SameSite, Max-Age, Expires…), les paramètres de Content-Type et Accept sont développés, et le bloc est audité pour les problèmes structurels classiques : lignes pliées obsolètes, caractères illégaux, en-têtes en double et en-têtes envoyés dans le mauvais sens. Tout s’exécute dans votre navigateur et rien n’est envoyé.
Entrée
Automatiquement examine la première ligne : une ligne de requête (GET /chemin HTTP/1.1) signifie requête, une ligne de statut (HTTP/1.1 200 OK) signifie réponse, tout le reste est lu comme un bloc nu d’en-têtes. Les autres choix forcent le sens, ce qui change les avertissements appliqués.
Rapport d’analyse
Rien n’est encore analysé. Collez un bloc de requête ou de réponse ci-dessus et appuyez sur Analyser les en-têtes, ou sur Exemple pour un cas commenté.
Où trouver un bloc qui vaut la peine d’être analysé. Dans un terminal, curl -v https://example.com/ 2>&1 affiche la requête et la réponse avec les préfixes > et < — retirez-les et collez. curl -sI https://example.com/ donne seulement le bloc d’en-têtes de réponse. Dans le navigateur, ouvrez les outils de développement, l’onglet Réseau, rechargez, sélectionnez la requête du document et utilisez Copier → Copier les en-têtes de réponse ; pour la requête, utilisez Copier comme cURL et lisez les options. Un simple bloc de lignes Nom: valeur sans ligne de départ s’analyse aussi — les contrôles de sens sont alors assouplis.
Autotest Relance l’analyseur sur des blocs fixes : détection du sens, les deux jeux d’exemples, chaque règle d’attribut Set-Cookie (SameSite=None sans Secure, un Max-Age non numérique, un Expires cassé, un attribut inconnu, un cookie sans signe égal), la jonction des lignes pliées, les noms de champs illégaux, les en-têtes en double, les incohérences de sens et les chemins négatifs. Rien n’est envoyé nulle part.
Qu’est-ce qu’un en-tête HTTP ?
En une phrase : un message HTTP est une ligne de départ, un bloc de lignes Nom: valeur appelées en-têtes, une ligne vide, et un corps facultatif — les en-têtes portent tout ce qui concerne le message, sauf le corps lui-même : qui l’a envoyé, ce qu’il peut accepter, comment il est mis en cache, comment il est authentifié, et ce que l’expéditeur attend en retour.
Les quatre familles
Famille
Circule
Exemples
Répond à la question
En-têtes de requête
client → serveur
Host, Accept, Cookie, Referer, Authorization
ce que veut le client et qui il prétend être
En-têtes de réponse
serveur → client
Location, Server, Set-Cookie, Retry-After
ce qu’a fait le serveur et ce qu’il demande en retour
dans quel format est le corps et quelle copie il représente
En-têtes de contrôle
les deux, à propos de la connexion
Cache-Control, Connection, Via, Transfer-Encoding
comment le message et la connexion sont traités en chemin
Certains en-têtes ne vont fermement que dans un sens : If-None-Match n’a de sens que dans une requête, et Set-Cookie que dans une réponse. Analyser dans le mauvais sens est l’une des erreurs classiques de débogage par copier-coller, c’est pourquoi cette page le signale.
La grammaire d’une ligne d’en-tête
La RFC 9110 définit une ligne de champ comme nom-de-champ ":" OWS valeur-de-champ OWS — un nom composé uniquement de caractères de jeton (lettres, chiffres et !#$%&'*+-.^_`|~), un deux-points sans espace avant, et une valeur de caractères visibles, d’espaces et de tabulations. Les noms d’en-têtes ne tiennent pas compte de la casse (content-type équivaut à Content-Type) ; les valeurs sont presque toujours sensibles à la casse. Une ligne commençant par une espace ou une tabulation prolongeait autrefois l’en-tête précédent — obs-fold, obsolète depuis 2014 : un proxy qui le déplie peut modifier le sens de l’en-tête, donc l’analyseur ici le joint mais vous avertit de sa présence.
Erreurs courantes
Faire confiance à X-Forwarded-For. Il est ajouté par chaque proxy sur le chemin, et un client peut forger le premier saut. Il indique ce qu’une chaîne de proxies affirme, pas qui est connecté ; traitez-le comme un indice, et privilégiez un proxy que vous contrôlez et qui l’écrase.
Ne lire que les en-têtes de réponse. La moitié des erreurs intéressantes (un Accept dupliqué, un Host manquant, un en-tête d’autorisation envoyé au mauvais hôte) se trouvent dans la requête, que le navigateur cache par défaut. Utilisez Copier comme cURL pour voir la vôtre.
Fusionner les lignes Set-Cookie. La plupart des en-têtes dupliqués peuvent être combinés avec des virgules — Set-Cookie ne le peut pas, car la virgule apparaît dans la valeur elle-même. Les navigateurs traitent chaque ligne comme un cookie distinct.
Croire que Content-Length est la taille du corps que vous avez écrit. C’est la taille après application de Content-Encoding, et seulement lorsque le message n’est pas découpé en morceaux ; une réponse Transfer-Encoding: chunked n’a pas de longueur unique significative.
Juger les en-têtes à leur préfixe X-. La convention a disparu avec la RFC 6648 : X-Forwarded-For et X-Content-Type-Options sont devenus des standards de fait permanents, alors que bien des en-têtes sans X sont expérimentaux. Jugez d’après le document qui le définit, non d’après le préfixe.
FAQ
Est-il sûr de coller des en-têtes ici ? L’analyse se fait entièrement dans votre navigateur et rien n’est envoyé. Cela dit, un bloc d’en-têtes copié est une empreinte : les cookies, les en-têtes d’autorisation et le User-Agent exact peuvent ensemble vous identifier — analysez donc des blocs que vous ne craindriez pas de montrer à un collègue.
Pourquoi mon navigateur affiche-t-il des en-têtes comme :status que cette page signale comme erreurs ? Ce sont des pseudo-en-têtes HTTP/2 et HTTP/3 — les couches de trames binaires remplacent la ligne de départ et Host par des champs pseudo. Cette page analyse le texte filaire classique HTTP/1.1 ; les pseudo-en-têtes contiennent la même information une fois traduite par le protocole.
Qu’est-il advenu de X-XSS-Protection ? Il est déprécié : l’auditeur qu’il pilotait causait ses propres failles de sécurité, et les navigateurs l’ont supprimé. Son rôle revient à une Content-Security-Policy — construisez-en une avec le générateur CSP et auditez l’ensemble sur le vérificateur d’en-têtes de sécurité.
Comment un attribut Set-Cookie est-il vérifié ? Selon la RFC 6265 : le nom et la valeur sont séparés au premier signe égal, les attributs après le premier point-virgule, Expires doit être une date au format cookie, Max-Age doit être composé de chiffres, SameSite doit valoir Strict, Lax ou None — et None sans Secure est rejeté par les navigateurs actuels, il est donc signalé.
Puis-je analyser seulement une liste de lignes d’en-têtes ? Oui — choisissez Bloc d’en-têtes uniquement et collez sans ligne de départ. Les contrôles de sens sont assouplis ; tout le reste (structure, Set-Cookie, paramètres) s’exécute toujours.