Richieste duplicate in Chrome

Ciao Team,

Il nostro team si occupa dei forum Discourse e sta riscontrando problemi di richieste duplicate su Chrome, mentre su Firefox e Safari non si verificano. Sospetto che questo problema sia legato ai service worker e a Workbox.

Com’è configurato l’ambiente?

  1. Abbiamo un dominio: https://example.com
  2. Gli script sono ospitati in un sottopercorso: https://example.com/assets/myScript.js
  3. myScript effettua una chiamata GET a un endpoint esterno: https://foobar.com/

Qual è il problema?

  1. Quando visito i forum per la prima volta (o dopo un aggiornamento forzato), viene inviata una singola richiesta dal browser.
  2. Alla seconda richiesta, vengono inviate due richieste dal browser: una proveniente dal file servito dal service worker e una da fetchWrapper.mjs - workbox/packages/workbox-core/_private/fetchWrapper.mjs at 194cdeb63d5abb21490f88f01f02f4bcf7e6d54b · GoogleChrome/workbox · GitHub

Informazioni aggiuntive:
https://github.com/discourse/discourse/blob/master/app/assets/javascripts/service-worker.js.erb#L18-L35 - Questa è la configurazione responsabile della creazione dei service worker. Utilizza la strategia “Network first”.

Come possiamo risolvere il problema?
Proprio come per l’autenticazione https://github.com/discourse/discourse/blob/master/app/assets/javascripts/service-worker.js.erb#L10, possiamo esporre /analytics/ come route o rendere configurabile per gli utenti l’invio di un array di route personalizzate impostate su NetworkOnly. Il nostro ambiente è basato su Docker e EC2, quindi questa configurazione dovrebbe essere esposta anche lì.

Sei sicuro che entrambe le richieste stiano raggiungendo effettivamente la rete? La seconda viene probabilmente utilizzata per rispondere alla prima.

Sì. Nella nostra configurazione, questo problema interessa il nostro codice di analytics, causando un raddoppio dei dati di analisi.

Quelle non sono richieste duplicate, ma solo una stranezza di come gli Strumenti per sviluppatori di Chrome visualizzano il proxy del service worker.

Inoltre, puoi controllare i log dell’applicazione per verificare che il server non riceva richieste duplicate per nessuna rotta, come /latest.json.

Quindi non si tratta di un bug di Discourse.

Grazie mille, team. Effettivamente si tratta di una stranezza di Chrome. Chrome sta mostrando più richieste, anche se i dati sono già stati deduplicati.