Używam Angular-CLI 1.6.6
i @angular/service-worker 5.2.5
w naszej Angular 5.2.5
aplikacji. Wszystko działa dobrze na lokalnym serwerze Lite, a także na serwerze produkcyjnym, z wyjątkiem jednego komunikatu o błędzie pojawiającego się w naszym środowisku produkcyjnym:
Nie udało się załadować zasobu: serwer odpowiedział statusem 504 (przekroczenie limitu czasu bramy)
Patrząc na ngsw-worker.js
skrypt, znalazłem wiersze (2466 poniżej), w których generowany jest powyższy komunikat o błędzie:
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',
});
}
}
Błąd logowania konsoli w haczyku powoduje wyświetlenie następującego błędu:
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>
Błąd, który wydaje się być związany z tym pytaniem: Co powoduje niepowodzenie wykonania „pobierania” w „ServiceWorkerGlobalScope”: „tylko w przypadku buforowania” można ustawić tylko z błędem trybu „tego samego źródła”?
Wymaganiem, które generuje ten błąd, jest każdy pierwszy dostęp do aplikacji:
https://example.com/test/#/connect
https://example.com/test/#/map?token=[accestoken]
...
Podczas ponownego ładowania aplikacji błąd się nie powtarza.
Czy ktoś może mi tu pomóc? Czy jest błąd w safeFetch()
usłudze Service Worker (może w celu obsługi HashLocationStrategy)? Czy muszę coś zmieniać w mojej konfiguracji?
Odpowiedzi:
Wyłączenie nagłówka ETag z zaplecza tymczasowo rozwiązało ten problem.
źródło