Angular Service Worker-加载资源失败: 服务器响应状态为504(网关超时)

我使用的 Angular-CLI 1.6.6@angular/service-worker 5.2.5在我们的 Angular 5.2.5应用程序。除了在我们的生产环境中弹出的一条错误消息之外,本地 lite-server 和生产服务器上的一切工作都很正常:

加载资源失败: 服务器响应状态为504 (网关暂停)

查看 ngsw-worker.js脚本,我发现上面的错误消息生成的行(下面是2466) :

    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',
});
}
}

Catch 中的控制台日志记录错误会产生以下错误:

    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>

似乎与这个问题有关的一个错误: 是什么导致了在 ServiceWorkerGlobalScope 上执行失败? 只有-if-cached 才能设置为只有同源模式错误?

产生此错误的请求是对应用程序的任何首次访问:

https://example.com/test/#/connect
https://example.com/test/#/map?token=[accestoken]
...

在应用程序重新加载时,该错误不会重复。

有人能帮帮我吗?服务工作者的 safeFetch()中是否存在 bug (可能是为了支持 HashLocationStrategy) ?我需要更改配置中的任何内容吗?

16103 次浏览

Disabling ETag header from backend solved this issue temporarily.

I was getting this error in chrome browser because of expired SSL certificate. Replacing the SSL certificate with a valid one was the solution.