내가 사용하고 Angular-CLI 1.6.6
그리고 @angular/service-worker 5.2.5
우리의 Angular 5.2.5
응용 프로그램. 프로덕션 환경에서 하나의 오류 메시지가 표시되는 것을 제외하고는 프로덕션 서버뿐만 아니라 로컬 라이트 서버에서도 모든 것이 잘 작동합니다.
리소스로드 실패 : 서버가 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’에서 ‘fetch’를 실행하지 못했습니다. ‘only-if-cached’는 ‘same-origin’모드 오류로만 설정할 수 있습니다.
이 오류를 생성하는 요청은 앱에 대한 첫 번째 액세스입니다.
https://example.com/test/#/connect
https://example.com/test/#/map?token=[accestoken]
...
앱을 다시로드 할 때 오류가 반복되지 않습니다.
아무도 여기서 나를 도울 수 있습니까? safeFetch()
서비스 워커에 버그가 있습니까 (HashLocationStrategy를 지원할 수도 있음)? 내 구성을 변경해야합니까?
답변
백엔드에서 ETag 헤더를 비활성화하면이 문제가 일시적으로 해결되었습니다.