Solicitudes duplicadas en Chrome

Hola equipo,

Nuestro equipo gestiona los foros de Discourse y estamos experimentando problemas de solicitudes duplicadas en Chrome, pero no en Firefox ni en Safari. Sospecho que este problema está relacionado con los service workers y Workbox.

¿Cómo es la configuración?

  1. Tenemos un dominio: https://example.com
  2. Los scripts se alojan en una subruta: https://example.com/assets/myScript.js
  3. myScript realiza una llamada GET a un punto final externo: https://foobar.com/

¿Cuál es el problema?

  1. Cuando visito los foros por primera vez (o tras una recarga forzada), se envía una única solicitud desde el navegador.
  2. En la segunda solicitud, se envían dos solicitudes desde el navegador: una desde el archivo servido por el service worker y otra desde fetchWrapper.mjs: workbox/packages/workbox-core/_private/fetchWrapper.mjs at 194cdeb63d5abb21490f88f01f02f4bcf7e6d54b · GoogleChrome/workbox · GitHub

Información adicional:
https://github.com/discourse/discourse/blob/master/app/assets/javascripts/service-worker.js.erb#L18-L35 - Esta es la configuración responsable de crear los service workers. Utiliza la estrategia Network first.

¿Cómo podemos solucionarlo?
Al igual que con la autenticación https://github.com/discourse/discourse/blob/master/app/assets/javascripts/service-worker.js.erb#L10, podemos exponer /analytics/ como una ruta o permitir que los usuarios configuren un array de rutas personalizadas que se establezcan en NetworkOnly. Nuestra configuración está en Docker y EC2, por lo que esto también debería exponerse allí.

¿Estás seguro de que ambas solicitudes están llegando a la red real? Es probable que la segunda se esté utilizando para responder a la primera.

Sí. En nuestra configuración, esto está ocurriendo con nuestro código de análisis, por lo que los datos de análisis se duplican.

Esas no son solicitudes duplicadas, sino simplemente una peculiaridad de cómo las Herramientas de Desarrollador de Chrome muestran el proxy del service worker.

Además, puedes revisar los registros de la aplicación para ver que el servidor no recibe solicitudes duplicadas para ninguna ruta, como /latest.json.

Por lo tanto, esto no es un error en Discourse.

¡Muchísimas gracias, equipo! Efectivamente, se trata de un comportamiento peculiar de Chrome. Chrome está mostrando múltiples solicitudes aunque los datos ya estén desduplicados.