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

时间:2018-02-16 13:59:46

标签: angular angular-cli angular5 service-worker angular-service-worker

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

Failed to load resource: the server responded with a status of 504 (Gateway Timeout)

查看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>

与此问题相关的错误:What causes a Failed to execute 'fetch' on 'ServiceWorkerGlobalScope': 'only-if-cached' can be set only with 'same-origin' mode error?

生成此错误的req是该应用的首次访问:

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

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

有人可以帮我吗?服务工作者的safeFetch()中是否存在错误(可能支持HashLocationStrategy)?我是否必须在配置中更改任何内容?

1 个答案:

答案 0 :(得分:0)

从后端禁用ETag标头可以暂时解决此问题。