请向我解释webpush如何在TCP / IP网络层(尤其是4-5层)中工作。
我了解HTTP是无状态协议:
因此,对于NAT之后的用户来说,能够查看远程主机的网页是可以理解的(因为NAT之后的用户是发起连接的用户);但网络服务器无法启动与客户端的TCP连接(浏览器进程)。
但是,有一些例外情况,例如“ websocket”,其中客户端(浏览器)启动连接,然后将其保持打开状态(仅升级为TCP,不再升级为HTTP)。在这种体系结构中,Web服务器可以向客户端发送/启动发送消息(例如“你有新的聊天消息”通知)。
我不明白的是新术语“ webpush”。
它是如何工作的?他们如何做到这一点?以前我认为:
这样对吗?还是我错过了什么?由于上述两种猜测都无法在NAT网络支持下工作
Firebase Web通知也是这种webpush吗?
我已经在互联网上搜索了有关使其在客户端上起作用的解释,但似乎仅对“如何发送Webpush”,“如何使用Webpush推销产品”进行了解释,这些文章仅对服务器端进行了说明(应用程序的通信)。伺服器与推播服务伺服器)或有关行销的文章。
另外,如果不是HTTP,我想了解它们正在运行的应用程序层协议(例如,客户端/服务器相互发送的文本/二进制数据)。
Web推送之所以有效,是因为浏览器(例如Chrome)和浏览器推送服务(例如FCM)之间存在持久的连接。
当你的应用服务器需要向浏览器发送通知时,它无法通过连接直接访问浏览器,而是与浏览器推送服务(例如,用于Chrome的FCM)联系,然后由浏览器推送服务将通知发送给用户浏览器。
这是可能的,因为浏览器不断尝试保持与服务器的开放连接(例如,用于Chrome的FCM)。这意味着NAT没有任何问题,因为是客户端启动了连接。还应考虑到任何TCP连接都是双向的:因此,连接的任何一侧都可以随时开始发送数据。请勿将HTTP等高级协议与常规TCP连接混淆。
如果你需要更多细节,我已经写了这篇文章,用简单的词来解释Web Push的工作方式。你还可以阅读标准:特别是Push API和IETF Web Push。
注意:Firebase(FCM)是两件不同的事情,即使文档中不清楚。它既是向Chrome传递通知所需的浏览器推送服务(例如,用于Firefox的Mozilla autopush,用于Edge的Windows Push Notification Services和用于Safari的Apple Push Notification Service),它还是一项专有服务,具有将通知发送给任何其他人的附加功能。浏览器(例如Pushpad,Onesignal等)。
因此,客户端/用户代理/浏览器(例如:chrome)保持与推送服务(例如:FCM)的开放TCP连接;和连接永远保持活力?浏览器会执行此操作而不显式执行该操作(例如:用户单击chrome图标)吗?
是的,浏览器与其自身的推送服务之间通常存在持久连接。如果无法在特定的操作系统上(例如,在后台)完成此操作,则使用另一种方法:例如,将推送消息从浏览器推送服务转发到操作系统的常规推送服务(例如,由Firefox完成)在Android上)。如果您需要确切的实现细节,则需要阅读我上面链接的标准。