J'utilise Angular-CLI 1.6.6 et @ angular/service-worker 5.2.5 dans notre application Angular 5.2.5. Tout fonctionne bien sur le lite-server local, ainsi que sur le serveur de production, à l'exception d'un message d'erreur apparaissant dans notre environnement de production:
Failed to load resource: the server responded with a status of 504 (Gateway Timeout)
En examinant le script ngsw-worker.js, j'ai trouvé les lignes (2466 suivantes) où le message d'erreur ci-dessus est généré:
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',
});
}
}
L'erreur de journalisation de la console dans le catch provoque l'erreur suivante:
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>
Une erreur qui semble liée à cette question: Qu'est-ce qui provoque l'échec de l'exécution de la récupération sur 'ServiceWorkerGlobalScope': 'only-if-cached' ne peut être défini qu'avec une erreur de mode 'same-Origin'?
La demande qui génère cette erreur est tout premier accès à l'application:
https://example.com/test/#/connect
https://example.com/test/#/map?token=[accestoken]
...
Lors du rechargement de l'application, l'erreur n'est pas répétée.
Quelqu'un peut-il m'aider ici? Existe-t-il un bogue dans safeFetch () de l'agent de service (peut-être pour prendre en charge HashLocationStrategy)? Dois-je changer quelque chose dans ma configuration?
La désactivation de l'en-tête ETag du backend a résolu temporairement ce problème.