web-dev-qa-db-ja.com

Angular Service Worker-リソースのロードに失敗しました:サーバーは504(ゲートウェイタイムアウト)のステータスで応答しました

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をサポートするためかもしれません)。設定を変更する必要がありますか?

43
tobik

バックエンドからETagヘッダーを無効にすると、この問題は一時的に解決されました。

1
Tibin Thomas