4. 订阅推送消息
4. 订阅推送消息
用户代理 (user agent) 向其配置的推送服务资源发送 POST 请求以创建新订阅.
POST /subscribe HTTP/1.1
Host: push.example.net
201 (Created) 响应表示推送订阅已创建. 必须在 Location 头字段中返回因该请求而创建的推送消息订阅资源的 URI.
推送服务必须在类型为 urn:ietf:params:push 的链接关系中提供与推送消息订阅对应的推送资源 URI.
使用特定于应用的方法将推送 URI 分发给应用服务器. 必须使用机密性保护与对应用服务器的身份验证, 确保该 URI 不会泄露给未授权接收方 (第 8.3 节).
HTTP/1.1 201 Created
Date: Thu, 11 Dec 2014 23:56:52 GMT
Link: </push/JzLQ3raZJfFBR0aqvOMsLrt54w4rJUsV>;
rel="urn:ietf:params:push"
Link: </subscription-set/4UXwi2Rd7jGS7gp5cuutF8ZldnEuvbOy>;
rel="urn:ietf:params:push:set"
Location: https://push.example.net/subscription/LBhhw0OohO-Wl4Oi971UG
4.1. Collecting Subscriptions into Sets (将订阅收集为集合)
将多个推送消息订阅收集到订阅集合 (subscription set) 中可显著提升推送服务与用户代理的效率. 推送服务可以 (MAY) 在类型为 urn:ietf:params:push:set 的链接关系中提供订阅集合资源的 URI.
当推送消息订阅响应中返回订阅集合时, 用户代理应当 (SHOULD) 在随后创建新推送消息订阅的请求中包含类型为 urn:ietf:params:push:set 的该订阅集合链接关系.
若无法在订阅生存期内以聚合方式接收推送消息, 用户代理可以 (MAY) 省略订阅集合. 若用户代理代表其他推送消息接收方监视订阅, 则可能有此必要.
POST /subscribe HTTP/1.1
Host: push.example.net
Link: </subscription-set/4UXwi2Rd7jGS7gp5cuutF8ZldnEuvbOy>;
rel="urn:ietf:params:push:set"
推送服务应当 (SHOULD) 在响应中返回相同订阅集合, 尽管若无法复用用户代理提供的集合, 也可以 (MAY) 返回新订阅集合.
HTTP/1.1 201 Created
Date: Thu, 11 Dec 2014 23:56:52 GMT
Link: </push/YBJNBIMwwA_Ag8EtD47J4A>;
rel="urn:ietf:params:push"
Link: </subscription-set/4UXwi2Rd7jGS7gp5cuutF8ZldnEuvbOy>;
rel="urn:ietf:params:push:set"
Location: https://push.example.net/subscription/i-nQ3A9Zm4kgSWg8_ZijV
推送服务必须 (MUST) 对包含无效订阅集合的请求返回 400 (Bad Request) 状态码. 推送服务可以 (MAY) 返回 429 (Too Many Requests) 状态码 [RFC6585] 以拒绝省略订阅集合的请求.
推送服务如何检测请求来自同一用户代理是实现相关的, 但可考虑环境信息, 例如 TLS 连接、源 IP 地址与端口. 实现者应注意某些启发式可能产生误报, 从而导致请求被错误拒绝.