From c2305b8ad30c4536ad7401fda0833fe91892954c Mon Sep 17 00:00:00 2001 From: seo Date: Sun, 12 Jul 2026 10:04:46 +0900 Subject: [PATCH] =?UTF-8?q?=EC=B0=A8=EB=9F=89=20=EB=AA=A8=EB=8B=88?= =?UTF-8?q?=ED=84=B0=20=EC=84=9C=EB=B9=84=EC=8A=A4=EC=9B=8C=EC=BB=A4=20?= =?UTF-8?q?=EC=9D=B8=EC=A6=9D=20=EC=BA=90=EC=8B=9C=20=EC=A0=9C=EC=99=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ monitor.php | 4 +++- sw.js | 10 +++++++--- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 04736a3..c6552b4 100644 --- a/README.md +++ b/README.md @@ -66,6 +66,8 @@ Car는 차량 모뎀/게이트웨이에서 받은 상태를 수집해 DB에 저 `asset-version.php`는 차량 모니터의 PHP/JS/CSS/manifest/icon 파일을 읽어 크기, 수정 시각, sha256 hash를 묶은 버전을 만듭니다. `assets/asset-reload.js`는 열린 모니터 화면에서 이 값을 확인하고, 달라지면 Cache Storage를 비운 뒤 현재 화면을 다시 엽니다. +`sw.js`는 아이콘과 manifest 같은 정적 자산만 캐시합니다. `monitor.php`, 인증 요청, AJAX/usage 같은 PHP 응답은 인증 쿠키와 실시간 상태가 엮이므로 service worker 캐시 대상에서 제외합니다. + ## 데이터/저장소 - Car DB tables: 차량 상태, 로그, 차트용 기록, TCP 요청 큐 diff --git a/monitor.php b/monitor.php index 5796224..81d9527 100644 --- a/monitor.php +++ b/monitor.php @@ -3350,7 +3350,9 @@ $carMonitorSession = car_monitor_launcher_session(); diff --git a/sw.js b/sw.js index c24c2ea..fc3811e 100644 --- a/sw.js +++ b/sw.js @@ -1,6 +1,5 @@ -const CACHE_NAME = 'car-monitor-v1'; +const CACHE_NAME = 'car-monitor-v2'; const CORE_ASSETS = [ - '/car/monitor.php', '/car/assets/favicon.svg', '/car/assets/icon-192.png', '/car/assets/icon-512.png', @@ -29,13 +28,18 @@ self.addEventListener('activate', event => { self.addEventListener('fetch', event => { const url = new URL(event.request.url); - if (url.origin !== location.origin || url.searchParams.get('mode') === 'ajax') { + if (url.origin !== location.origin) { + return; + } + + if (event.request.mode === 'navigate' || url.pathname.endsWith('.php') || url.searchParams.has('mode')) { return; } event.respondWith( fetch(event.request) .then(response => { + if (!response || !response.ok) return response; const copy = response.clone(); caches.open(CACHE_NAME).then(cache => cache.put(event.request, copy)); return response;