Doppelte Anfragen in Chrome

Hallo Team,

unser Team verwaltet Discourse-Foren und hat Probleme mit doppelten Anfragen auf Chrome, während Firefox und Safari davon nicht betroffen sind. Ich vermute, dass dieses Problem mit Service Workern und Workbox zusammenhängt.

Wie sieht das Setup aus?

  1. Wir haben eine Domain: https://example.com
  2. Skripte werden über einen Subpfad gehostet: https://example.com/assets/myScript.js
  3. myScript führt einen GET-Aufruf an einen externen Endpunkt durch: https://foobar.com/

Was ist das Problem?

  1. Beim ersten Besuch des Forums (oder nach einem harten Neuladen) wird vom Browser nur eine einzige Anfrage gesendet.
  2. Bei der zweiten Anfrage werden zwei Anfragen vom Browser gesendet: eine von der Datei, die vom Service Worker bereitgestellt wird, und eine von fetchWrapper.mjs - workbox/packages/workbox-core/_private/fetchWrapper.mjs at 194cdeb63d5abb21490f88f01f02f4bcf7e6d54b · GoogleChrome/workbox · GitHub

Zusätzliche Informationen:
https://github.com/discourse/discourse/blob/master/app/assets/javascripts/service-worker.js.erb#L18-L35 - Dies ist die Konfiguration, die für die Erstellung von Service Workern verantwortlich ist. Sie verwendet die „Network first“-Strategie.

Wie können wir das beheben?
Genau wie bei auth https://github.com/discourse/discourse/blob/master/app/assets/javascripts/service-worker.js.erb#L10 können wir /analytics/ als Route freigeben oder konfigurierbar machen, sodass Benutzer ein Array benutzerdefinierter Routen übergeben können, das auf NetworkOnly gesetzt ist. Unser Setup läuft auf Docker und EC2, daher sollte dies dort ebenfalls freigegeben werden.

Bist du sicher, dass beide Anfragen das tatsächliche Netzwerk erreichen? Die zweite wird wahrscheinlich als Antwort auf die erste verwendet.

Ja. In unserem Setup betrifft dies unseren Analytics-Code, wodurch sich die Analytics-Daten verdoppeln.

Das sind keine doppelten Anfragen, sondern lediglich eine Eigenart der Darstellung des Service Worker-Proxy in den Chrome DevTools.

Außerdem können Sie die Anwendungsprotokolle überprüfen, um zu sehen, dass der Server keine doppelten Anfragen für beliebige Routen wie /latest.json erhält.

Dies ist also kein Fehler in Discourse.

Vielen Dank, Team. Das ist tatsächlich eine Chrome-Sonderheit. Chrome zeigt mehrere Anfragen an, obwohl die Daten bereits dedupliziert wurden.