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?
- Temos um domínio: https://example.com
- Os scripts são hospedados em um subcaminho: https://example.com/assets/myScript.js
- O myScript faz uma chamada GET para um endpoint externo: https://foobar.com/
Qual é o problema?
- Quando acesso os fóruns pela primeira vez (ou faço um hard refresh), uma única requisição é enviada pelo navegador.
- 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.