桌面Firefox使用service-worker.js缓存时User-Agent异常问题
Firefox桌面端Service Worker请求异常User-Agent问题排查与解决
问题现象
- 桌面版Firefox正常User-Agent:
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/113.0 - 启用Service Worker缓存文件时,服务器端检测到的User-Agent为:
Mozilla/5.0 (Android 4.4; Mobile; rv:109.0) Gecko/109.0 Firefox/109.0
关键注意点
- 问题发生在正常桌面端网页浏览场景下
- 开发者控制台的网络流量显示User-Agent正常,但服务器端检测结果为移动浏览器
- 使用
Ctrl+F5强制刷新页面时,会一次性发送正确的User-Agent
所用Service Worker代码
let version; version = 4; // This is the service worker with the combined offline experience (Offline page + Offline copy of pages) const CACHE = "system-v"+version; importScripts('https://storage.googleapis.com/workbox-cdn/releases/5.1.2/workbox-sw.js'); // TODO: replace the following with the correct offline fallback page i.e.: const offlineFallbackPage = "offline.html"; const offlineFallbackPage = "pwa-offline/?v="+version; self.addEventListener("message", (event) => { if (event.data && event.data.type === "SKIP_WAITING") { self.skipWaiting(); } }); self.addEventListener('install', async (event) => { event.waitUntil( caches.open(CACHE) .then((cache) => cache.add(offlineFallbackPage)) ); }); if (workbox.navigationPreload.isSupported()) { workbox.navigationPreload.enable(); } workbox.routing.registerRoute( new RegExp('/*\.(js|css|jpe?g|png|gif|webp|svg|ico)'), new workbox.strategies.StaleWhileRevalidate({ cacheName: CACHE }) ); self.addEventListener('fetch', (event) => { if (event.request.mode === 'navigate') { event.respondWith((async () => { try { const preloadResp = await event.preloadResponse; if (preloadResp) { return preloadResp; } const networkResp = await fetch(event.request); return networkResp; } catch (error) { const cache = await caches.open(CACHE); const cachedResp = await cache.match(offlineFallbackPage); return cachedResp; } })()); } });
问题成因与解决方法
成因
问题并非Service Worker代码本身导致,而是由Firefox官方扩展Side View引发——该扩展在Service Worker发起请求时会注入异常的移动设备User-Agent。
解决方法
禁用或卸载Side View扩展即可恢复正常的User-Agent发送逻辑。
内容的提问来源于stack exchange,提问作者Muhammed
相关产品推荐
相关产品推荐

