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é.
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.
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
FamilleCirculeExemplesRépond à la question
En-têtes de requêteclient → serveurHost, Accept, Cookie, Referer, Authorizationce que veut le client et qui il prétend être
En-têtes de réponseserveur → clientLocation, Server, Set-Cookie, Retry-Afterce qu’a fait le serveur et ce qu’il demande en retour
En-têtes de représentationles deux, à propos du corpsContent-Type, Content-Length, Content-Encoding, ETagdans quel format est le corps et quelle copie il représente
En-têtes de contrôleles deux, à propos de la connexionCache-Control, Connection, Via, Transfer-Encodingcomment 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.