为什么 Service Worker 不能在 http 站点上工作?

Why does service worker won't work on http sites?

我正在学习 service worker API。我在其中发现了更多很酷的功能。但令我兴奋的是,为什么它只适用于 https 站点而不适用于 http 站点?

我认为这与安全有关,但我在浏览时找不到原因。因此,任何解释这一点的解释都值得赞赏...

由于 service worker 相当强大,即使在原始页面不再打开时也能够 运行,因此您真的需要限制谁可以设置 service worker,谁不能。由于纯 HTTP 请求非常容易 man-in-the-middled,任何随机 Javascript 都可以注入到这样的请求中,这可以设置一个服务工作者。这意味着,您的 ISP、像中国这样的政府或严重的攻击者可以很容易地设置服务工作者。通过要求 HTTPS 连接,在很大程度上避免了中间人,您至少可以确保设置 service worker 的 Javascript 实际上来自您认为的页面。

为了补充@deceze 的回答,如果攻击者在中间人连接到 HTTP 站点,它只能这次破坏该站点——不能保证以后与该站点的连接被破坏,例如,对于依赖本地网络访问的攻击,可能不容易重现。

如果可以在 http 网站上使用 service worker,攻击者只需要进行一次中间人攻击就可以永远(或至少在清除浏览器之前)成为内容的来源对于所述网站。