You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在非localhost的自签名证书域名下使用MSW时Service Worker注册失败的解决问询

在非localhost的自签名证书域名下使用MSW时Service Worker注册失败的解决问询

我太懂这种卡在Service Worker和自签名证书之间的憋屈感了——绕开localhost用自定义域名本来就多了一堆配置,结果MSW还来添乱,Chrome的启动参数有时候又像个不听话的孩子。给你几个亲测有效的解决方向,挨个试,应该能搞定:

1. 先把自签名证书导入Chrome的信任根证书库

Service Worker对证书的信任要求比普通页面苛刻得多,哪怕页面能打开,Service Worker也不认未被根信任的证书。步骤是这样的:

  • 打开Chrome访问https://abcd.io:5173,点击地址栏那个带叉的锁图标,选择「证书」
  • 切到「详细信息」标签,点击「复制到文件」,跟着向导导出成DER编码的.cer文件
  • 打开Chrome设置,搜索「管理证书」,在「受信任的根证书颁发机构」标签下点击「导入」,把刚才导出的.cer文件导进去,然后完全重启Chrome(包括后台的Chrome进程,任务管理器里确认全关了)

2. 确认MSW的Service Worker脚本路径和Vite配置

Vite的静态文件规则容易踩坑,得确保mockServiceWorker.js能被正确访问:

  • mockServiceWorker.js放到Vite项目的public目录下(Vite会直接把这个目录的文件映射到网站根目录),现在手动访问https://abcd.io:5173/mockServiceWorker.js,应该能直接看到脚本内容,而不是404或者证书错误
  • 注册Service Worker时,确认配置的路径和scope正确,比如:
    worker.start({
      serviceWorker: {
        url: '/mockServiceWorker.js',
        scope: '/',
      },
    })
    
    别用相对路径,就用绝对路径从根目录开始。

3. 修正Chrome的启动参数(别加多余斜杠!)

你之前的参数可能因为小细节失效了,完全关闭Chrome后,用这个命令启动:

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --ignore-certificate-errors --unsafely-treat-insecure-origin-as-secure=https://abcd.io:5173

注意两点:

  • 路径带空格,所以要加双引号
  • https://abcd.io:5173后面不要加斜杠,斜杠会导致Chrome识别参数出错
  • 必须完全关闭所有Chrome窗口再执行这个命令,不然参数不会生效

4. 强制Vite加载你的自定义证书

有时候Vite会偷偷用自动生成的临时证书,和你手动配置的域名不匹配,导致Service Worker报错。在vite.config.js里明确指定证书路径:

import { defineConfig } from 'vite'

export default defineConfig({
  server: {
    https: {
      key: './path/to/your/private-key.pem', // 你的私钥文件路径
      cert: './path/to/your/certificate.pem', // 你的证书文件路径
    },
    host: 'abcd.io',
    port: 5173,
  },
})

配置完重启Vite服务,确保启动时用的是你自己生成的那套证书。

最后先做个前置测试

在折腾MSW之前,先单独访问https://abcd.io:5173/mockServiceWorker.js,如果这个脚本能正常加载(Chrome控制台没有证书相关的红报错),那问题就出在MSW的注册逻辑;如果这个脚本都加载失败,那先把证书信任的问题彻底解决,再碰MSW。

我之前遇到类似问题,就是证书没导入根信任库导致的,Chrome启动参数其实是辅助,核心还是得让浏览器真正信任你的自签名证书。

火山引擎 最新活动