チームの皆様、こんにちは。
当チームは Discourse フォーラムの運用を担当しており、Chrome でのみ重複リクエストが発生する問題に直面しています(Firefox や Safari では発生しません)。この問題は、Service Worker(Workbox)に関連しているのではないかと推測しています。
現在の構成は以下の通りです:
- ドメイン:https://example.com
- スクリプトはサブパスでホストされています:https://example.com/assets/myScript.js
- myScript は外部エンドポイントに対して GET リクエストを送信します:https://foobar.com/
問題の詳細:
- フォーラムを初めて訪問する際(またはハードリフレッシュ時)には、ブラウザから単一のリクエストが送信されます。
- 2 回目のリクエストでは、ブラウザから 2 つのリクエストが送信されます。1 つは Service Worker から提供されたファイル由来のもので、もう 1 つは 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 - これは Service Worker の作成を担当する設定です。Network first 戦略を使用しています。
解決策は?
認証の扱いと同様に(https://github.com/discourse/discourse/blob/master/app/assets/javascripts/service-worker.js.erb#L10)、/analytics/ をルートとして公開するか、ユーザーが NetworkOnly に設定されたカスタムルートの配列を渡せるように設定可能にします。当社の環境は Docker と EC2 で構成されているため、これらでも同様に公開する必要があります。