Angular 5.2.5アプリでAngular-CLI 1.6.6および@ angular/service-worker 5.2.5を使用しています。すべてがローカルのlite-serverと同様に正常に動作します本番環境では、本番環境で表示される1つのエラーメッセージを除き、
Failed to load resource: the server responded with a status of 504 (Gateway Timeout)
Ngsw-worker.jsスクリプトを調べると、上記のエラーメッセージが生成される行(以下2466)が見つかりました。
async safeFetch(req) {
try {
return await this.scope.fetch(req);
}
catch (err) {
this.debugger.log(err, `Driver.fetch(${req.url})`);
return this.adapter.newResponse(null, {
status: 504,
statusText: 'Gateway Timeout',
});
}
}
Catchのコンソールロギングエラーでは、次のエラーが出力されます。
TypeError: Failed to execute 'fetch' on 'ServiceWorkerGlobalScope': 'only-if-cached' can be set only with 'same-Origin' mode
at Driver.safeFetch (ngsw-worker.js:2464)
at Driver.handleFetch (ngsw-worker.js:1954)
at <anonymous>
この質問に関連すると思われるエラー: 「ServiceWorkerGlobalScope」で「fetch」を実行できなかった原因:「only-if-cached」は「same-Origin」モードエラーでのみ設定できますか?
このエラーを生成する要件は、アプリの最初のアクセスです。
https://example.com/test/#/connect
https://example.com/test/#/map?token=[accestoken]
...
アプリのリロードでは、エラーは繰り返されません。
誰かここで私を助けることができますか?サービスワーカーのsafeFetch()にバグはありますか(HashLocationStrategyをサポートするためかもしれません)。設定を変更する必要がありますか?
バックエンドからETagヘッダーを無効にすると、この問題は一時的に解決されました。