Дублирующиеся запросы в Chrome

Привет, команда,

Наша команда занимается форумами Discourse, и мы сталкиваемся с проблемой дублирования запросов в Chrome, тогда как в Firefox и Safari такой проблемы нет. Я подозреваю, что эта проблема связана с сервисными работниками и библиотекой Workbox.

Как выглядит наша конфигурация?

  1. У нас есть домен — https://example.com
  2. Скрипты размещены по подпути — https://example.com/assets/myScript.js
  3. myScript выполняет GET-запрос к внешнему эндпоинту — https://foobar.com/

В чём проблема?

  1. При первом посещении форума (или при жёстком обновлении страницы) браузер отправляет один запрос.
  2. При втором запросе браузер отправляет два запроса: один из файла, обслуживаемого сервисным работником, и другой из 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, поэтому это также должно быть доступно там.

Вы уверены, что оба запроса действительно отправляются в сеть? Скорее всего, второй используется для ответа на первый.

Да. В нашей настройке это происходит с нашим кодом аналитики, из-за чего данные аналитики дублируются.

Это не дублирующиеся запросы, а просто особенность отображения прокси сервис-воркера в инструментах разработчика Chrome.

Кроме того, вы можете проверить логи приложения и убедиться, что сервер не получает дублирующиеся запросы ни для каких маршрутов, например /latest.json.

Таким образом, это не ошибка в Discourse.

Огромное спасибо, команда. Действительно, это особенность Chrome. Chrome отображает несколько запросов, хотя данные уже дедуплицированы.