网络推送协议如何工作?

Posted

技术标签:

【中文标题】网络推送协议如何工作?【英文标题】:How web push protocol works? 【发布时间】:2020-10-21 16:54:59 【问题描述】:

问题

我想知道webpush 协议是如何工作的?它是否保持某种连接打开,例如WebSocket 协议?还是使用类似于polling的机制?

试过

根据documentationWebPush使用HTTP 2.0服务器推送:

用于向用户代理传递实时事件的简单协议 被描述。该方案使用 HTTP/2 服务器推送。

服务器推送wikipedia:

HTTP/2 服务器推送不是服务器到客户端的通知机制。相反,当客户端可能已经产生了获取资源的请求时,它会使用推送的资源;

HTTP/2 服务器推送示例场景:

考虑一个包含三个资源的网站:index.html、styles.css 和 script.js。当用户通过他们的浏览器连接到本网站的主页时,他们会自动检索 index.html。当浏览器解析 index.html 中的 HTML 文本时,它会找到需要 styles.css 和 script.js 的指令。此时,浏览器将发出请求以获取另外两个文件。

使用 HTTP/2 Push,服务器可以通过制定规则来采取主动,甚至在请求内容之前就触发内容发送。在这个示例场景中,服务器知道任何请求 index.html 的人都需要 style.css 和 script.js,因此它可以立即将它们推送到客户端,而无需等待客户端请求它们。

根据 HTTP/2 服务器推送,WebPush 协议似乎应该在客户端请求之前返回某种通知。但我不确定。所以这是我的问题:它到底是如何工作的?

【问题讨论】:

【参考方案1】:

Web 推送协议 [RFC8030] 描述了一种协议,它支持用户代理或应用服务器与推送服务之间的通信。推送服务接收网络请求,对其进行验证并将推送消息传递到适当的浏览器。如果浏览器离线,则消息将排队等待浏览器在线。每个浏览器都可以使用他们想要的任何推送服务,这是开发人员无法控制的。

【讨论】:

以上是关于网络推送协议如何工作?的主要内容,如果未能解决你的问题,请参考以下文章

基于workerman的实时推送

网络协议类型

MQTT协议及推送服务

如何采用mqtt协议实现android消息推送

WebSocket消息推送

向 APNs 发送 Django 推送通知会出现协议错误