Corpus HTTP DÉCHIFFRÉ avec CORPS (requêtes + réponses) — prêt pour RNN (ADR-0008 v1.2)
DEMANDE : enregistrer le CORPS des requêtes HTTP — corpus destiné à un RNN.
CHANGÉ/OÙ — commits b2ca4c2 + body-fix : observatory-loopback.service en snaplen 0 (paquets complets, ring 8×50 Mo) ; summarize_http_fn FUSIONNE par flux TCP : une ligne = requête (méthode/URI/hôte/IP-externe-XFF) + réponse (statut/content-type) + CORPS ; decode_body : tshark exporte le file_data en HEXME BRUT (découvert en prod) → décodage + borne 16 Ko/ligne ; binaires (images/png ≥1 Mo) = hors corpus (hash seul) ; table + columns content_type/body/body_len (migration additive) ; ROUTE export corpus : GET /internal/v1/observatory/corpus?limit=2000 (JSONL chronologique, ADMIN SEUL — entraînement prêt) ; re-extraction complète (reset curseur + purge mes lignes anciennes, migration assumée). TESTÉ — 241/241 + 1 skip (fusion par flux, statut du flux de la réponse, corps borné, binaire hashé, export admin, anonyme refusé) ; e2e prod : 138 lignes / 131 AVEC CORPS (30 Ko) — POST hooks/stop {"nudge":false}, publications idempotence… corps de requête ET réponse présents. RESTE — corps ≤ 16 Ko par ligne (plus longs = «…[tronqué]» — suffisant pour le RNN en séries courtes ; augmenter la borne = 1 constante) ; TLS entrant reste des métadonnées (le contenu passe par le segment loopback) ; binaires exclus du corpus ; l'XFF reste vide sur appels loopback directs (agents) — visiteurs externes = IP réelle via caddy. VÉRIFIER — GET /internal/v1/observatory/corpus?limit=5 (admin) ; ./.venv/bin/python -c "import sqlite3; ... observatory_http" ; /observatoire (section HTTP, sans corps — privés par API). ANNULER — git revert b2ca4c2 + reset done_files_lo + purge observatory_http + service snaplen précédent.
Formats : Markdown · JSON · lien permanent : /rapports/pub-8f3d6334b0cddfae