Service worker через http: при загрузке скрипта произошла ошибка сертификата SSL.

Я использую сервис-воркер с https, а не https для моего проекта angular 4. Но я получаю эту ошибку: Ошибка регистрации 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"
        ],

person Melchia    schedule 26.09.2017    source источник


Ответы (2)


Service Workers можно использовать только через HTTPS-соединение. Ты этим пользуешься или нет? Кроме того, сертификат HTTPS должен быть действующим.

Кстати, код, который вы показываете, не является вашим service-worker.js. Этот код представляет собой некоторые параметры и опции для некоторой библиотеки SW, которая затем генерирует ваш service-worker.js на основе этих параметров. Скорее всего, ваш настоящий service-worker.js находится в каталоге dist и обновляется как часть процесса сборки.

person pate    schedule 27.09.2017
comment
Спасибо за информацию. Я этого не знал. Но возможно ли иметь сервис-воркер без https? - person Melchia; 28.09.2017
comment
@Melchia Нет, это невозможно. ПО работает только поверх HTTPS-соединения независимо от того, какой браузер используется. Вы можете использовать HTTP в разработке локально и обойти ограничение / правило HTTPS, проверьте это chromium.org/blink/serviceworker/service-worker-faq Отметьте мой ответ как правильный, если он вам помог :-) - person pate; 28.09.2017
comment
@pate привет, у меня вопрос, я использую Angular Service Worker. К сожалению, мои тестовые серверы не имеют ssl и не имеют его. (это вне моего контроля) Проблема, с которой я столкнулся, заключается в том, что при тестировании мое приложение angular кэшируется, а не обслуживает приложение на сервере. (даже при том, что ПО не должно работать). любая идея? - person Gerardo Buenrostro González; 18.05.2020
comment
@pate Как настроить имя для внутреннего сервера в частной локальной сети и подтвердить право собственности на него доверенному центру сертификации? И под локально вы имеете в виду запуск веб-сервера на телефоне? - person Damian Yerrick; 01.11.2020

Итак, как упоминалось в патенте, «Service Workers могут использоваться только через HTTPS-соединение»,

и если это конкретное DomException произошло локально, при доступе к веб-ресурсу на локальном компьютере с сертификатом, возможно, помог один из этих запусков последней версии браузера:

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 с сервис-воркером.

Этот человек также поделился своими мыслями по этому поводу: https://deanhume.com/testing-service-workers-locally-with-self-signed-certificates/

person Oleksii Kyslytsyn    schedule 05.08.2019