fix(télémétrie): beacon en text/plain — évite le preflight CORS qui perdait tous les événements - #15
Merged
Merged
Conversation
…erdait tous les événements sendBeacon avec un Blob application/json déclenche un preflight CORS (application/json n'est pas un type « simple »). Firefox l'exécute puis abandonne le POST : sendBeacon renvoie true, le repli fetch n'est jamais atteint, et aucun événement de navigateur n'arrive au collecteur. text/plain rend la requête « simple » : plus de preflight, beacon délivré. Le collecteur ne contrôle pas le Content-Type (json.loads sur le corps). Preuve navigateur réel (page https://cborweb.com, origine du site) : - Blob application/json : preflight 204, POST jamais abouti, 0 insertion - Blob text/plain : aucun preflight, POST 200, insertion confirmée - fetch (repli) : POST 200, insertion confirmée
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problème
La télémétrie first-party de cborweb.com n'enregistrait aucun événement de navigateur. Le compteur
events_rawne contenait que des lignes émises parcurl(tests manuels) — la dernière ligne issue d'un navigateur datait du 10/09.Deux défauts se cumulaient. Le premier (CORS du collecteur, corrigé séparément et déjà déployé) :
Le second, objet de cette PR, n'était visible qu'avec un vrai navigateur :
t.jsémet ses lots vianavigator.sendBeaconavec unBlobde typeapplication/json. Orapplication/jsonn'est pas un type « simple » au sens CORS : un preflight est alors exigé, et Firefox l'exécute puis abandonne le POST.Piège aggravant :
sendBeaconrenvoietrue(mise en file acceptée) alors que la requête n'aboutit jamais — le replifetchprésent juste en dessous n'est donc jamais atteint.Correctif
Une ligne : le
Blobpasse entext/plain, type « simple » qui n'exige aucun preflight.Le format du corps est inchangé (toujours du JSON) et le collecteur ne contrôle pas le
Content-Type— il faitjson.loads()sur le corps. Aucun changement serveur n'est nécessaire.Preuves — mesurées depuis la page
https://cborweb.comdans Firefox, origine du sitesendBeacon+ Blobapplication/json(avant)sendBeacon+ Blobtext/plain(après)fetch+keepalive(repli existant)Trace réseau : la requête
application/jsonreste encompleted: false; celle entext/plainrevient en200sans requêteOPTIONSpréalable.Vérification en base (
events_raw, basewebmastersur serveur-dev) :Tests
node --check docs/site/t.js→ OKevents_rawavec l'empreinte du navigateur.Contexte
docs/revue-e2e-telemetrie-20260918.html(dépôt agent-webmaster)