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?
- Wir haben eine Domain: https://example.com
- Skripte werden über einen Subpfad gehostet: https://example.com/assets/myScript.js
- myScript führt einen GET-Aufruf an einen externen Endpunkt durch: https://foobar.com/
Was ist das Problem?
- Beim ersten Besuch des Forums (oder nach einem harten Neuladen) wird vom Browser nur eine einzige Anfrage gesendet.
- 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.