Я использую Angular-CLI 1.6.6
и @angular/service-worker 5.2.5
в нашем Angular 5.2.5
приложении. Все работает нормально на локальном lite-сервере, а также на производственном сервере, за исключением одного сообщения об ошибке, появляющегося в нашей производственной среде:
Не удалось загрузить ресурс: сервер ответил статусом 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',
});
}
}
Ошибка ведения журнала консоли в перехвате выдает следующую ошибку:
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>
Ошибка, которая, кажется, связана с этим вопросом: что вызывает Failed to execute 'fetch' on 'ServiceWorkerGlobalScope': 'only-if-cached' может быть установлено только с ошибкой режима 'same-origin'?
Запрос, который генерирует эту ошибку, - это любой первый доступ к приложению:
https://example.com/test/#/connect
https://example.com/test/#/map?token=[accestoken]
...
При перезагрузке приложения ошибка не повторяется.
Кто-нибудь может мне здесь помочь? Есть ли ошибка в safeFetch()
сервис-воркере (возможно, для поддержки HashLocationStrategy)? Мне нужно что-то менять в моей конфигурации?
Ответы:
Отключение заголовка ETag из бэкэнда временно решило эту проблему.
источник