2. 概述
2. 概述
推送服务的一般模型包含三个基本参与者: 用户代理 (user agent)、推送服务 (push service) 与应用 (服务器).
+-------+ +--------------+ +-------------+
| UA | | Push Service | | Application |
+-------+ +--------------+ | Server |
| | +-------------+
| Subscribe | |
|--------------------->| |
| Monitor | |
|<====================>| |
| | |
| Distribute Push Resource |
|-------------------------------------------->|
| | |
: : :
| | Push Message |
| Push Message |<---------------------|
|<---------------------| |
| | |
图 1: WebPush 架构
在流程最开始, 用户代理创建新的消息订阅, 然后将其分发给应用服务器. 该订阅是各参与者之间所有未来交互的基础. 应用服务器使用订阅向推送服务发送消息以投递给用户代理. 用户代理使用订阅监视推送服务上的入站消息.
为在授权方面提供更多控制, 消息订阅被建模为具有不同能力的两种资源:
-
订阅资源 (subscription resource) 用于从订阅接收消息并删除订阅. 它对用户代理私有.
-
推送资源 (push resource) 用于向订阅发送消息. 它公开并由用户代理与其应用服务器共享.
预期每个应用会分发唯一订阅, 但协议本身没有固有的基数约束. 可为同一应用创建多个订阅, 或多个应用共享同一订阅. 但请注意, 共享订阅具有安全与隐私影响.
订阅具有有限生存期. 推送服务或用户代理也可随时终止订阅. 用户代理与应用服务器必须准备好管理订阅状态的变化.
2.1. HTTP Resources (HTTP 资源)
本协议使用 HTTP 资源 [RFC7230] 与链接关系 (link relations) [RFC5988]. 定义下列资源:
push service (推送服务): 该资源用于创建推送消息订阅 (第 4 节). 推送服务的 URL 配置到用户代理中.
push message subscription (推送消息订阅): 该资源提供对消息订阅的读与删访问. 用户代理使用推送消息订阅接收推送消息 (第 6 节). 每个推送消息订阅恰好关联一个推送资源.
push message subscription set (推送消息订阅集合): 该资源提供对一组推送消息订阅集合的读与删访问. 用户代理为集合中所有推送消息订阅接收推送消息 (第 6.1 节). 类型为 urn:ietf:params:push:set 的链接关系标识推送消息订阅集合.
push (推送): 应用服务器使用推送资源请求投递 (第 5 节) 推送消息. 类型为 urn:ietf:params:push 的链接关系标识推送资源.
push message (推送消息): 推送服务创建推送消息资源, 以标识已被接受投递 (第 5 节) 的推送消息. 用户代理还通过删除推送消息资源来确认 (第 6.2 节) 已收到推送消息.
receipt subscription (回执订阅): 应用服务器使用回执订阅接收推送消息的投递确认 (第 5.1 节). 类型为 urn:ietf:params:push:receipt 的链接关系标识回执订阅.