Привет, команда,
Наша команда занимается форумами Discourse, и мы сталкиваемся с проблемой дублирования запросов в Chrome, тогда как в Firefox и Safari такой проблемы нет. Я подозреваю, что эта проблема связана с сервисными работниками и библиотекой Workbox.
Как выглядит наша конфигурация?
- У нас есть домен — https://example.com
- Скрипты размещены по подпути — https://example.com/assets/myScript.js
- myScript выполняет GET-запрос к внешнему эндпоинту — https://foobar.com/
В чём проблема?
- При первом посещении форума (или при жёстком обновлении страницы) браузер отправляет один запрос.
- При втором запросе браузер отправляет два запроса: один из файла, обслуживаемого сервисным работником, и другой из fetchWrapper.mjs — workbox/packages/workbox-core/_private/fetchWrapper.mjs at 194cdeb63d5abb21490f88f01f02f4bcf7e6d54b · GoogleChrome/workbox · GitHub
Дополнительная информация:
https://github.com/discourse/discourse/blob/master/app/assets/javascripts/service-worker.js.erb#L18-L35 — это конфигурация, отвечающая за создание сервисных работников. Она использует стратегию Network first.
Как мы можем это исправить?
Аналогично аутентификации (https://github.com/discourse/discourse/blob/master/app/assets/javascripts/service-worker.js.erb#L10), мы можем добавить маршрут /analytics/ или предоставить пользователям возможность передавать массив пользовательских маршрутов, для которых устанавливается стратегия NetworkOnly. Наша инфраструктура работает на Docker и EC2, поэтому это также должно быть доступно там.