Warm tip: This article is reproduced from serverfault.com, please click

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

(firebase - How webpush work in TCP/IP network layers)

发布于 2020-11-28 11:58:10

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

我了解HTTP是无状态协议:

  • 该协议正在打开TCP /第4层连接,
  • “状态”是通过Cookie /会话“使能工作”的,
  • 然后客户端发送HTTP请求(纯文本/压缩后的“ HTTP / 1.1 / url / here ... Content-Length:...”),
  • 然后服务器以HTTP请求响应(纯文本/压缩后的“ 200 OK ... ...”),

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

但是,有一些例外情况,例如“ websocket”,其中客户端(浏览器)启动连接,然后将其保持打开状态(仅升级为TCP,不再升级为HTTP)。在这种体系结构中,Web服务器可以向客户端发送/启动发送消息(例如“你有新的聊天消息”通知)。

我不明白的是新术语“ webpush”。

  • 我观察到它可以将通知从服务器发送到客户端/浏览器(从用户那里,它感觉像服务器是发起连接的服务器一样)
  • webpush可以随时发送通知,即使浏览器已关闭/尚未打开(例如刚打开设备时),或者只是已连接到互联网

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

  • 页面中的javascript连续不断地(例如:5秒间隔)检查服务器中是否有新的通知,
  • 或用javascript启动websocket(浏览器启动/打开TCP连接)并使之保持活动状态,当服务器需要发送某些内容时,它会通过此连接从web服务器发送到客户端/浏览器

这样对吗?还是我错过了什么?由于上述两种猜测都无法在NAT网络支持下工作

Firebase Web通知也是这种webpush吗?

我已经在互联网上搜索了有关使其在客户端上起作用的解释,但似乎仅对“如何发送Webpush”,“如何使用Webpush推销产品”进行了解释,这些文章仅对服务器端进行了说明(应用程序的通信)。伺服器与推播服务伺服器)或有关行销的文章。

另外,如果不是HTTP,我想了解它们正在运行的应用程序层协议(例如,客户端/服务器相互发送的文本/二进制数据)。

Questioner
Kristian
Viewed
11
collimarco 2020-11-28 22:34:33

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

当你的应用服务器需要向浏览器发送通知时,它无法通过连接直接访问浏览器,而是与浏览器推送服务(例如,用于Chrome的FCM)联系,然后由浏览器推送服务将通知发送给用户浏览器。

这是可能的,因为浏览器不断尝试保持与服务器的开放连接(例如,用于Chrome的FCM)。这意味着NAT没有任何问题,因为是客户端启动了连接。还应考虑到任何TCP连接都是双向的:因此,连接的任何一侧都可以随时开始发送数据。请勿将HTTP等高级协议与常规TCP连接混淆。

如果你需要更多细节,我已经写了这篇文章,用简单的词来解释Web Push的工作方式。你还可以阅读标准:特别是Push APIIETF Web Push

注意:Firebase(FCM)是两件不同的事情,即使文档中不清楚。它既是向Chrome传递通知所需的浏览器推送服务(例如,用于Firefox的Mozilla autopush,用于Edge的Windows Push Notification Services和用于Safari的Apple Push Notification Service),它还是一项专有服务,具有将通知发送给任何其他人的附加功能。浏览器(例如Pushpad,Onesignal等)。