Angular Service Worker - nie udało się załadować zasobu: serwer odpowiedział stanem 504 (przekroczenie limitu czasu bramy)

86

Używam Angular-CLI 1.6.6i @angular/service-worker 5.2.5w naszej Angular 5.2.5aplikacji. 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.jsskrypt, 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?

tobik
źródło
9
Wydaje się, że wiele osób boryka się z tym problemem. github.com/angular/angular/issues/20756 github.com/angular/angular/issues/20970 itd. Nie żeby to było pomocne, ale wygląda na to, że patrzy się na to zgodnie z projektem angular
sje
1
Proszę podać PEŁNE źródła (lub jeszcze lepiej stackblitz, proszę :)
yomateo
Czy możesz dostarczyć zrzut ekranu z karty sieci, który pokazuje 504?
Daniel Habenicht
2
Było trochę prac odbywa się na tej kwestii . @tobik czy to nadal problem?
Joniras,
2
to błąd związany
Fateh Mohamed

Odpowiedzi:

1

Wyłączenie nagłówka ETag z zaplecza tymczasowo rozwiązało ten problem.

Tibin Thomas
źródło
czy możesz rozwinąć swoją odpowiedź, gdzie mogę znaleźć ten ETag w aplikacji kątowej.
vndpal
Musisz to zrobić w konfiguracji zaplecza.
Tibin Thomas