Ich benutze das Angular-CLI 1.6.6
und @angular/service-worker 5.2.5
in unserer Angular 5.2.5
App. Auf dem lokalen Lite-Server sowie auf dem Produktionsserver funktioniert alles einwandfrei, bis auf eine Fehlermeldung in unserer Produktionsumgebung:
Fehler beim Laden der Ressource: Der Server antwortete mit dem Status 504 (Gateway Timeout).
Beim Betrachten des ngsw-worker.js
Skripts habe ich die Zeilen (2466 folgt) gefunden, in denen die obige Fehlermeldung generiert wird:
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',
});
}
}
Der Fehler bei der Konsolenprotokollierung im Fang gibt den folgenden Fehler aus:
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>
Ein Fehler, der mit dieser Frage in Zusammenhang zu stehen scheint: Was führt dazu, dass "Abrufen" in "ServiceWorkerGlobalScope" fehlgeschlagen ist: "Nur wenn zwischengespeichert" kann nur mit dem Modusfehler "Gleicher Ursprung" festgelegt werden?
Die Anforderung, die diesen Fehler generiert, ist jeder erste Zugriff auf die App:
https://example.com/test/#/connect
https://example.com/test/#/map?token=[accestoken]
...
Beim erneuten Laden der App wird der Fehler nicht wiederholt.
Kann mir hier jemand helfen? Gibt es einen Fehler im safeFetch()
Service Worker (möglicherweise zur Unterstützung von HashLocationStrategy)? Muss ich etwas an meiner Konfiguration ändern?
Antworten:
Durch Deaktivieren des ETag-Headers im Backend wurde dieses Problem vorübergehend behoben.
quelle