Requêtes dupliquées dans Chrome

Bonjour l’équipe,

Notre équipe gère les forums Discourse et rencontre des problèmes de requêtes en double sur Chrome, mais pas sur Firefox ou Safari. Je soupçonne que ce problème est lié aux service workers et à Workbox.

À quoi ressemble la configuration ?

  1. Nous avons un domaine : https://example.com
  2. Les scripts sont hébergés sur un sous-chemin : https://example.com/assets/myScript.js
  3. myScript effectue un appel GET vers un point de terminaison externe : https://foobar.com/

Quel est le problème ?

  1. Lorsque je visite les forums pour la première fois (ou après un rafraîchissement forcé), une seule requête est envoyée par le navigateur.
  2. Lors de la deuxième requête, deux requêtes sont envoyées par le navigateur. L’une provient du fichier servi par le service worker, et l’autre de fetchWrapper.mjs : workbox/packages/workbox-core/_private/fetchWrapper.mjs at 194cdeb63d5abb21490f88f01f02f4bcf7e6d54b · GoogleChrome/workbox · GitHub

Informations supplémentaires :
https://github.com/discourse/discourse/blob/master/app/assets/javascripts/service-worker.js.erb#L18-L35 - Il s’agit de la configuration responsable de la création des service workers. Elle utilise la stratégie « Network first ».

Comment pouvons-nous résoudre ce problème ?
Tout comme pour l’authentification (https://github.com/discourse/discourse/blob/master/app/assets/javascripts/service-worker.js.erb#L10), nous pouvons exposer /analytics/ en tant que route ou permettre aux utilisateurs de passer un tableau de routes personnalisées configurées en mode NetworkOnly. Notre configuration est basée sur Docker et EC2, il faut donc également exposer cela dans cet environnement.

Êtes-vous certain que les deux requêtes touchent bien le réseau ? La seconde sert probablement à répondre à la première.

Oui. Dans notre configuration, cela affecte notre code d’analyse, ce qui entraîne un doublement des données d’analyse.

Ce ne sont pas des requêtes en double, mais simplement une particularité de la façon dont les Outils de développement de Chrome affichent le proxy du service worker.

Vous pouvez également consulter les journaux de l’application pour constater que le serveur ne reçoit pas de requêtes en double pour aucune des routes, comme /latest.json.

Il ne s’agit donc pas d’un bug de Discourse.

Merci beaucoup, l’équipe. En effet, c’est une particularité de Chrome. Chrome affiche plusieurs requêtes alors que les données ont déjà été dédupliquées.