为啥我的服务人员看到“错误 - 只允许安全来源”?

Posted

技术标签:

【中文标题】为啥我的服务人员看到“错误 - 只允许安全来源”?【英文标题】:Why am I seeing "Error - Only secure origins are allowed" for my service worker?为什么我的服务人员看到“错误 - 只允许安全来源”? 【发布时间】:2017-05-13 09:25:54 【问题描述】:

当我尝试在我的渐进式 Web 应用页面上添加服务工作者时,为什么浏览器控制台会显示以下错误?

ERROR "Uncaught (in promise) DOMException: Only secure origins are allowed

JS代码:

(function () 
    'use strict';

    // TODO add service worker code here
    if ('serviceWorker' in navigator) 
        navigator.serviceWorker
            .register('service-worker.js')
            .then(function () 
                console.log('Service Worker Registered');
            );
    
)();

【问题讨论】:

【参考方案1】:

来自Service Worker FAQ:

问:我收到一条关于“仅允许安全来源”的错误消息。为什么?

答: Service Worker 仅适用于“安全来源”(基本上是 HTTPS 网站),这符合优先使用安全来源以获得强大新功能的政策。不过http://localhost 也被认为是安全来源,所以如果可以的话,在 localhost 上开发是避免此错误的简单方法。

您也可以使用--unsafely-treat-insecure-origin-as-secure 命令行标志。该标志必须与--user-data-dir 标志结合使用。例如:

$ ./chrome --user-data-dir=/tmp/foo --unsafely-treat-insecure-origin-as-secure=http://your.insecure.site

如果您想使用自签名证书在 https://localhost 上进行测试,请执行以下操作:

$ ./chrome --allow-insecure-localhost https://localhost

您可能还会发现--ignore-certificate-errors 标志很有用。

【讨论】:

【参考方案2】:

您可以像这样在注册 service worker 之前检查协议, location.protocol === 'https:' && serviceWorker.register('service-worker.js')

【讨论】:

【参考方案3】:

尝试使用 http://127.0.0.1:8080 用于本地托管 代替 http://192.168.29.53:8080

【讨论】:

【参考方案4】:

在 chrome 中输入chrome://flags

搜索“安全来源”

然后点击Enabled,重新启动chrome。

【讨论】:

这完全有道理,它可以解决问题 - 但至少在我的情况下它不起作用。有什么建议吗?

以上是关于为啥我的服务人员看到“错误 - 只允许安全来源”?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的路线返回 404 错误 Laravel?

为啥我的测试人员不允许测试我的 iphone 应用程序?

为啥无法登录 Google Play 服务?

为啥我的 gunicorn Python/Flask 工作人员退出信号项?

为啥我的节点静态文件服务器丢弃请求?

为啥我的客户端应该只连接到一个子节点集群工作人员时接收来自所有子节点集群工作人员的套接字发射?