Solicitações duplicadas no Chrome

Olá, equipe,

Nossa equipe está gerenciando fóruns Discourse e estamos enfrentando problemas de requisições duplicadas no Chrome, mas não no Firefox ou Safari. Suspeito que esse problema esteja relacionado aos service workers e ao Workbox.

Como está configurado?

  1. Temos um domínio: https://example.com
  2. Os scripts são hospedados em um subcaminho: https://example.com/assets/myScript.js
  3. O myScript faz uma chamada GET para um endpoint externo: https://foobar.com/

Qual é o problema?

  1. Quando acesso os fóruns pela primeira vez (ou faço um hard refresh), uma única requisição é enviada pelo navegador.
  2. Na segunda requisição, duas requisições são enviadas pelo navegador: uma proveniente do arquivo servido pelo service worker e outra do fetchWrapper.mjs - workbox/packages/workbox-core/_private/fetchWrapper.mjs at 194cdeb63d5abb21490f88f01f02f4bcf7e6d54b · GoogleChrome/workbox · GitHub

Informações adicionais:
https://github.com/discourse/discourse/blob/master/app/assets/javascripts/service-worker.js.erb#L18-L35 - Esta é a configuração responsável pela criação dos service workers. Ela utiliza a estratégia “Network first”.

Como podemos corrigir isso?
Assim como ocorre com a autenticação https://github.com/discourse/discourse/blob/master/app/assets/javascripts/service-worker.js.erb#L10, podemos expor /analytics/ como uma rota ou tornar configurável para que os usuários passem um array de rotas personalizadas definidas como NetworkOnly. Nossa configuração está em Docker e EC2, então isso também deve ser exposto nesses ambientes.

Tem certeza de que ambas as solicitações estão atingindo a rede real? A segunda provavelmente está sendo usada para responder à primeira.

Sim. Em nossa configuração, isso está ocorrendo com nosso código de análise, e, portanto, os dados de análise estão sendo duplicados.

Essas não são solicitações duplicadas, mas apenas uma peculiaridade de como as Ferramentas de Desenvolvedor do Chrome exibem o proxy do service worker.

Além disso, você pode verificar os logs do aplicativo para ver que o servidor não recebe solicitações duplicadas para nenhuma rota, como /latest.json.

Portanto, isso não é um bug no Discourse.

Muito obrigado, equipe. De fato, isso é uma peculiaridade do Chrome. O Chrome está exibindo múltiplas solicitações, embora os dados já estejam desduplicados.