Nuxt PWA的Service Worker仅localhost可注册,局域网IP访问无法注册
Nuxt PWA Service Worker局域网IP访问注册失败解决办法
根本原因
现代浏览器对Service Worker的运行有严格的安全上下文限制,仅允许在本地回环地址(localhost/127.0.0.1)或者HTTPS协议站点下注册运行。你通过局域网IP192.168.0.2访问时走的是普通HTTP协议,不符合安全要求,因此触发报错。
你当前提供的manifest.json、sw.js、nuxt.config.js的PWA相关配置均无问题,scope和start_url均为根路径,和服务路径匹配。注意你nuxt.config.js中配置的服务端口为8000,若无额外端口转发配置,访问地址应为192.168.0.2:8000,注意端口匹配。
开发环境解决方案
方案1:临时放行指定不安全站点
- 打开Chrome浏览器,地址栏输入
chrome://flags/#unsafely-treat-insecure-origin-as-secure回车访问 - 找到Insecure origins treated as secure选项,选择
Enabled,在下方输入框填入你需要放行的地址,比如http://192.168.0.2:8000 - 按照提示重启浏览器,再次访问即可正常注册Service Worker
方案2:本地启用HTTPS服务
使用openssl生成自签名证书,在nuxt.config.js中配置HTTPS服务:
// nuxt.config.js 新增https配置,注意提前引入fs和path模块 import fs from 'fs' import path from 'path' export default { // 其他配置保持不变 server: { host: '0.0.0.0', port: 8000, https: { key: fs.readFileSync(path.resolve(__dirname, '你的证书key文件路径/server.key')), cert: fs.readFileSync(path.resolve(__dirname, '你的证书crt文件路径/server.crt')) } } }
配置完成后重启服务,使用https://192.168.0.2:8000访问即可符合安全要求。
生产环境解决方案
生产部署时必须为站点配置正式的HTTPS证书,可选择免费的Let's Encrypt证书或者云服务商提供的免费SSL证书,配置HTTPS访问后Service Worker即可正常注册运行。
内容的提问来源于stack exchange,提问作者onxdt
相关产品推荐
相关产品推荐

