tldr; 这取决于您的浏览器,因为它需要在每个浏览器级别上进行配置。截至 2018 年 5 月,似乎 Firefox 是唯一允许您配置服务 url 的。对于其他所有人,您需要互联网才能传递推送消息。
2017 年 12 月的Push API 规范(截至 2018 年 5 月的官方规范)是这样说的:
术语推送服务是指允许应用程序服务器向 Web 应用程序发送推送消息的系统。推送服务为其服务的推送订阅提供一个或多个推送端点。
每个用户代理只有一个推送服务,并且不能从默认值更改。这种限制是由于各种与性能相关的问题,包括运行可靠推送服务的复杂性以及如果设备可以连接一组无限的推送服务对电池寿命的影响。
2018年4 月,他们放宽了这一要求,规范现在允许配置不同的提供者。
我还建议阅读这个 webpush 工作原理的简化版本,其中要点如下:
- 首先终端用户的浏览器需要与浏览器厂商的推送服务器建立推送通道。在 Firefox 的情况下,这将是 Mozilla 服务器,在 Chrome 的情况下,这将是 Google 服务器。完成后,一个唯一的端点 URL 被发送到浏览器,浏览器生成一个公钥和私钥对,该对存储在浏览器内部。然后,浏览器会生成一个公钥和一个用户身份验证机密,供您的服务器使用,以对发送到用户浏览器的消息进行端到端加密。
- 浏览器将公钥、身份验证密钥和端点 URL 发送到您的服务器,服务器以某种方式将其存储(在数据库中、内存中、文件中,等等)。
- 当服务器希望发送推送消息时,它会检索存储的推送消息订阅信息,并使用公钥和用户身份验证创建加密消息。然后服务器联系端点 URL 并告诉它推送一些内容到用户代理。
- 鉴于一切正常,推送服务器将消息推送到用户的浏览器。