webpush 如何在 TCP/IP 个网络层中工作

How webpush work in TCP/IP network layers

请向我解释一下 webpush 在 TCP/IP 网络层(尤其是第 4-5 层)是如何工作的。

我了解 HTTP 是无状态协议:

因此,NAT 后的用户能够查看远程主机的网页是可以理解的(因为 NAT 后的用户是发起连接的用户);但网络服务器无法启动与客户端(浏览器进程)的 TCP 连接。

但是也有一些例外情况,例如 'websocket' 客户端(浏览器)启动连接,然后保持打开状态(提升到仅 TCP,不再是 HTTP)。在此架构中,网络服务器可以向客户端发送/发起发送消息(例如“您有新的聊天消息”通知)。

我不明白的是新名词'webpush'。

它是如何工作的?他们如何做到这一点?以前我认为:

这是正确的吗?或者我错过了什么?因为我上面的两个猜测在 NAT 网络后都不起作用

Firebase web通知也是这种webpush吗?

我已经在互联网上搜索了关于它在客户端工作的原因的解释,但似乎只有 'how to send webpush'、'how to market your product with webpush' 的解释,这些文章只解释了服务器端(应用程序的通信服务器与推送服务服务器)或有关营销的文章。

此外,我有兴趣了解它们 运行 使用的是什么应用层协议(例如 client/server 相互发送的 text/binary 数据),如果它是不是 HTTP

Web 推送之所以有效,是因为浏览器(例如 Chrome)和浏览器推送服务(例如 FCM)之间存在持久连接。

当您的应用服务器需要向浏览器发送通知时,它无法通过连接直接到达浏览器,而是联系浏览器推送服务(例如 Chrome 的 FCM),然后是浏览器向用户浏览器发送通知的推送服务。

这是可能的,因为浏览器不断尝试与服务器保持打开的连接(例如 Chrome 的 FCM)。这意味着 NAT 没有任何问题,因为它是客户端启动连接。还要考虑任何 TCP 连接都是双向的:因此连接的任何一方都可以随时开始发送数据。不要将 HTTP 等更高级别的协议与普通的 TCP 连接混淆。

如果你想要更多细节,我已经写了 this article that explains in simple words how Web Push works. You can also read the standards: Push API and IETF Web Push

注意:Firebase (FCM) 是两个不同的东西,即使从文档中看不清楚。它既是向 Chrome 发送通知所需的浏览器推送服务(如 Firefox 的 Mozilla autopush,Edge 的 Windows 推送通知服务和 Safari 的 Apple 推送通知服务),但它也是专有服务具有向任何浏览器(如 Pushpad、Onesignal 等)发送通知的附加功能。