【问题标题】:Service worker over http: An SSL certificate error occurred when fetching the scriptService Worker over http:获取脚本时发生 SSL 证书错误
【发布时间】:2018-03-08 06:51:39
【问题描述】:

我正在为我的 Angular 4 项目使用 https 而不是 https 的服务人员。但我得到这个错误: Service Worker 注册失败:DOMException:无法注册 ServiceWorker:获取脚本时发生 SSL 证书错误。

这是我的 service-worker.js

module.exports = {
    navigateFallback: '/index.html',
    stripPrefix: 'dist',
    root: 'dist/',
    staticFileGlobs: [
        'dist/index.html',
        'dist/**.js',
        'dist/**.css',
        'dist/assets/image/**.*',
        'dist/assets/image/client-home-carousel/**.*',
    ]
};

angular-cli.json 中的一个:

"assets": [
            "assets",
            "favicon.ico",
            "service-worker.js"
        ],

【问题讨论】:

    标签: angular http https service-worker


    【解决方案1】:

    Service Worker 只能通过 HTTPS 连接使用。你用还是不用?此外,HTTPS 证书必须有效。

    作为旁注,您显示的代码不是您的 service-worker.js。该代码是一些 SW 库的一些参数和选项,然后基于这些选项生成您的 service-worker.js。很可能您的实际 service-worker.js 位于 dist 目录中,并作为构建过程的一部分进行更新。

    【讨论】:

    • 感谢您提供的信息。我不知道。但是有没有可能没有 https 的服务人员?
    • @Melchia 不,这是不可能的。无论使用何种浏览器,SW 都只能在 HTTPS 连接之上工作。您可以在本地开发中使用 HTTP 并绕过 HTTPS 限制/规则,请查看chromium.org/blink/serviceworker/service-worker-faq 如果对您有帮助,请标记我的答案正确:-)
    • @pate 嘿,我有一个问题,我使用 Angular Service Worker。不幸的是,我的测试服务器没有 ssl,也不会有。 (它超出了我的控制)我遇到的问题是,在测试我的 Angular 应用程序时,它会被缓存,而不是为服务器中的应用程序提供服务。 (即使软件不应该工作)。有什么想法吗?
    • @pate 如何为私有 LAN 上的内部服务器设置名称并将其所有权证明给受信任的 CA? “本地”是指在手机上运行网络服务器吗?
    【解决方案2】:

    所以正如 pate 提到的“Service Worker 只能通过 HTTPS 连接使用”,

    如果特定的 DomException 发生在本地,当使用证书访问本地计算机上的 Web 资源时,这些最新版本的浏览器启动之一可能会有所帮助:

    open -a Opera.app --args --user-data-dir=/tmp/foo --ignore-certificate-errors --unsafely-treat-insecure-origin-as-secure=https://localhost:8111
    
    open -a Brave\ Browser.app --args --user-data-dir=/tmp/foo --ignore-certificate-errors --unsafely-treat-insecure-origin-as-secure=https://localhost:8111
    
    open -a Google\ Chrome.app --args --user-data-dir=/tmp/foo --ignore-certificate-errors --unsafely-treat-insecure-origin-as-secure=https://localhost:8111
    

    Chromium 浏览器没有从这些设置开始,以允许克服这个特定的 DomException 以在本地使用 SSL 和 service worker。

    此人也为此事提供了一些见解作为故事:https://deanhume.com/testing-service-workers-locally-with-self-signed-certificates/

    【讨论】:

      猜你喜欢
      • 2017-03-26
      • 1970-01-01
      • 2015-03-18
      • 2011-12-26
      • 2016-07-06
      • 2018-06-11
      相关资源
      最近更新 更多