Retour au blog

Le Retour du 402 Payment Required : Ce Que les Codes de Statut HTTP Révèlent sur le Trafic de Bots

Les codes de statut HTTP portent plus de signal que la plupart des outils d'analytics n'en exploitent. Voici comment l'analyse du statut côté serveur aide à séparer les humains des bots sans traquer personne.

La plupart des décisions d'analytics web se prennent côté client, une fois la page chargée et le JavaScript exécuté. Ce modèle suppose silencieusement que chaque requête atteignant votre serveur mérite d'être comptée. Ce n'est pas le cas. Une large part du trafic brut ne rend jamais rien, n'appartient jamais à un humain, et ne devrait jamais atteindre vos tableaux de bord. Le signal le plus clair et le plus précoce pour le filtrer est quelque chose que vous générez déjà à chaque requête : le code de statut HTTP.

Les codes de statut sont un signal d'analytics de premier ordre

La spécification de sémantique HTTP (RFC 9110) définit les codes de statut comme un entier à trois chiffres décrivant le résultat d'une requête, regroupés en cinq classes : 1xx informatif, 2xx succès, 3xx redirection, 4xx erreur client et 5xx erreur serveur. Comme Monoid tourne sur l'edge de Cloudflare, nous voyons le code de statut renvoyé par l'origine (ou par l'edge lui-même) avant qu'aucun script client ne s'exécute. Cet ordre compte. Une page vue enregistrée par un beacon de navigateur ne peut exister que si le document a effectivement été servi avec un 2xx et analysé. Mais le flux de requêtes contient bien plus que des documents réussis.

Considérez ce qu'une origine typique renvoie sur une journée : des documents HTML réussis, des réponses 304 Not Modified à des requêtes conditionnelles, des redirections 301/308 dues à la canonicalisation, des 404 issus de scanners en sondage, et des rafales de 5xx pendant les incidents. Ne compter que les documents rendus avec succès en ignorant le reste jette aux orties un contexte qui explique les anomalies de votre courbe de trafic.

Où les bots se cachent dans la distribution des statuts

Les clients automatisés se comportent différemment des navigateurs, et les codes de statut exposent cette différence à moindre coût. Les scanners de vulnérabilités génèrent des grappes denses de réponses 404 et 403 en sondant des panneaux d'administration et des chemins de CMS connus. Les crawlers agressifs ignorent le 429 Too Many Requests — défini dans la RFC 6585 comme la réponse pour la limitation de débit — et continuent de marteler, produisant une signature qu'aucune session humaine ne crée. Les scrapers naïfs suivent souvent des chaînes de redirection qu'un vrai navigateur court-circuiterait via le bfcache ou l'historique.

Le code 402 Payment Required est instructif ici. La RFC 9110 précise explicitement qu'il est réservé pour un usage futur et n'a pas de sémantique standardisée, mais il connaît récemment un regain d'attention pour l'accès mesuré aux API et aux agents. Si votre origine commence à émettre des 402, ce trafic est presque certainement programmatique, pas une personne en train de naviguer. Un pipeline conscient du statut peut le marquer en conséquence plutôt que de gonfler silencieusement une métrique.

Pourquoi l'analytics uniquement côté client se trompe ici

Un outil purement JavaScript ne peut littéralement pas observer la majeure partie de tout cela. Si une requête renvoie 403, aucun script d'analytics ne s'exécute, donc l'événement est invisible — mais la charge sur votre infrastructure est bien réelle, et l'intention derrière (reconnaissance, credential stuffing, scraping) est souvent exactement ce que vous voulez savoir. À l'inverse, les outils qui comptent des lignes de log serveur sans distinguer par statut surestiment, traitant chaque saut 301 et chaque sondage 404 comme un « hit ».

Le juste milieu utile est une classification du statut au niveau de l'edge alimentant un modèle de comptage privacy-first :

  • 2xx text/html avec une navigation réelle est une candidate à la page vue.
  • 3xx doit être attribué à la destination, pas compté deux fois.
  • 4xx relève du diagnostic, pas de l'audience — à afficher séparément.
  • 5xx relève d'un panneau de fiabilité, corrélé à toute baisse des vues réussies.

Faire tout cela sans traquer personne

Rien de tout cela ne nécessite d'identifier un visiteur. Le code de statut, la méthode, la classe de réponse et un horodatage grossier sont des propriétés de l'échange requête-réponse, pas d'une personne. Monoid ne pose jamais de cookies, ne lit jamais le localStorage et ne fait jamais de fingerprinting d'appareil. Nous n'avons pas besoin d'un identifiant stable pour savoir qu'une rafale de 429 à 03h00 UTC provient de l'automatisation plutôt que d'une audience — la distribution des statuts le dit d'elle-même. C'est la minimisation des données qui joue en notre faveur : le signal le moins personnel est aussi l'un des plus honnêtes pour la qualité du trafic.

Il y a également un bénéfice de conformité. Filtrer le trafic non humain à l'edge signifie que moins d'événements parasites entrent dans le stockage analytics, ce qui garde les données enregistrées plus proches de leur finalité déclarée. Selon les principes de limitation de la conservation et de limitation de la finalité du RGPD (articles 5(1)(c) et 5(1)(e)), ne pas collecter de bruit est strictement préférable à le collecter puis le jeter ensuite.

Enseignements pratiques

Si vous construisez ou évaluez un outil d'analytics, posez trois questions. Voit-il le code de statut, ou seulement les documents rendus ? Sépare-t-il les signaux de fiabilité (5xx) des signaux d'audience (2xx) ? Et parvient-il à filtrer les bots sans identifiant ? Un pipeline qui répond oui aux trois vous donne des chiffres plus propres et une surface de confidentialité plus réduite en même temps — ce qui, pour une fois, revient à la même décision.

Sources

Comments

Loading comments…