Estoy usando Angular-CLI 1.6.6 y @angular/service-worker 5.2.5 en nuestra aplicación Angular 5.2.5 . Todo funciona bien en el servidor lite local, así como en el servidor de producción, excepto por un mensaje de error que aparece en nuestro entorno de producción:
No se pudo cargar el recurso: el servidor respondió con un estado de 504 (Tiempo de espera de puerta de enlace)
Buscando en el ngsw-worker.js encontré las líneas (2466 siguientes) donde se genera el mensaje de error anterior:
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', }); } }El error de registro de la consola en la captura arroja el siguiente error:
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>Un error que parece relacionado con esta pregunta: ¿Qué causa un error al ejecutar 'fetch' en 'ServiceWorkerGlobalScope': 'solo si se almacena en caché' se puede configurar solo con el error de modo 'mismo origen'?
El requisito que genera este error es cualquier primer acceso a la aplicación:
https://example.com/test/#/connect https://example.com/test/#/map?token=[accestoken] ...Al recargar la aplicación, el error no se repite.
¿Alguien puede ayudarme aquí? ¿Hay un error en safeFetch() del trabajador del servicio (tal vez para admitir HashLocationStrategy)? ¿Tengo que cambiar algo en mi configuración?
Deshabilitar el encabezado ETag desde el backend resolvió este problema temporalmente.