6. Receiving Push Messages for a Subscription
6. Receiving Push Messages for a Subscription
Le user agent demande la livraison de nouveaux messages en effectuant un GET sur la ressource d'abonnement. Le service push ne répond pas à cette requête ; il utilise le server push HTTP/2 [RFC7540] pour envoyer le contenu des messages au fur et à mesure.
Le user agent MAY inclure Urgency. Le service MUST NOT livrer des messages d'urgence inférieure à la valeur indiquée (tableau 1).
Chaque message est poussé comme réponse à une requête GET synthétique dans un PUSH_PROMISE, vers la ressource message créée lors de la demande de livraison. Les en-têtes de réponse SHOULD inclure un lien urn:ietf:params:push vers la ressource push de l'abonnement. Le corps est celui de la dernière requête POST sur la ressource push.
Exemple HTTP/2 :
HEADERS [stream 7] +END_STREAM +END_HEADERS
:method = GET
:path = /subscription/LBhhw0OohO-Wl4Oi971UG
:authority = push.example.net
La requête reste en suspens. Lorsqu'un message arrive, un server push est généré.
PUSH_PROMISE [stream 7; promised stream 4] +END_HEADERS
:method = GET
:path = /message/qDIYHNcfAIPP_5ITvURr-d6BGt
:authority = push.example.net
HEADERS [stream 4] +END_HEADERS
:status = 200
date = Thu, 11 Dec 2014 23:56:56 GMT
last-modified = Thu, 11 Dec 2014 23:56:55 GMT
cache-control = private
link = </push/JzLQ3raZJfFBR0aqvOMsLrt54w4rJUsV>;
rel="urn:ietf:params:push"
content-type = text/plain;charset=utf8
content-length = 36
DATA [stream 4] +END_STREAM
iChYuI3jMzt3ir20P8r_jgRR-dSuN182x7iB
HEADERS [stream 7] +END_STREAM +END_HEADERS
:status = 200
Avec Prefer [RFC7240] et wait=0, le user agent peut demander immédiatement le contenu. Le service MUST alors générer un push pour tous les messages non encore livrés.
204 sans pushes indique qu'aucun message n'est disponible (peut-être expirés).
6.1. Receiving Push Messages for a Subscription Set
S'il existe un ensemble, le user agent SHOULD surveiller l'ensemble plutôt que chaque abonnement individuellement.
Le GET sur la ressource d'ensemble se comporte comme ci-dessus, avec server push [RFC7540]. La requête synthétique MUST inclure le lien urn:ietf:params:push pour distinguer la source. Exemple :
HEADERS [stream 7] +END_STREAM +END_HEADERS
:method = GET
:path = /subscription-set/4UXwi2Rd7jGS7gp5cuutF8ZldnEuvbOy
:authority = push.example.net
PUSH_PROMISE [stream 7; promised stream 4] +END_HEADERS
:method = GET
:path = /message/qDIYHNcfAIPP_5ITvURr-d6BGt
:authority = push.example.net
HEADERS [stream 4] +END_HEADERS
:status = 200
date = Thu, 11 Dec 2014 23:56:56 GMT
last-modified = Thu, 11 Dec 2014 23:56:55 GMT
link = </push/JzLQ3raZJfFBR0aqvOMsLrt54w4rJUsV>;
rel="urn:ietf:params:push"
cache-control = private
content-type = text/plain;charset=utf8
content-length = 36
DATA [stream 4] +END_STREAM
iChYuI3jMzt3ir20P8r_jgRR-dSuN182x7iB
HEADERS [stream 7] +END_STREAM +END_HEADERS
:status = 200
Prefer wait=0 : le service MUST pousser tous les messages en attente. 204 sans pushes : rien de disponible.
6.2. Acknowledging Push Messages
Pour une livraison au moins une fois, le user agent MUST supprimer la ressource message par HTTP DELETE.
DELETE /message/qDIYHNcfAIPP_5ITvURr-d6BGt HTTP/1.1
Host: push.example.net
Si le service reçoit l'accusé et qu'un accusé de livraison était demandé, il MUST renvoyer 204 au serveur qui surveille l'abonnement aux accusés.
Sans accusé dans un délai raisonnable, le message est considéré non livré. Le service SHOULD réessayer jusqu'à l'expiration annoncée.
Le service MAY cesser avant l'expiration (user agent inactif, contraintes). Dans ce cas, avec accusé demandé, il MUST renvoyer 410 (Gone).
6.3. Receiving Push Message Receipts
Le serveur d'application envoie un GET sur l'abonnement aux accusés. Le service utilise le server push [RFC7540] pour envoyer les accusés lorsque le user agent a confirmé (6.2).
Chaque accusé est une réponse à une GET synthétique vers la même ressource message ; le statut indique le résultat, sans corps.
HEADERS [stream 13] +END_STREAM +END_HEADERS
:method = GET
:path = /receipt-subscription/3ZtI4YVNBnUUZhuoChl6omUvG4ZM
:authority = push.example.net
204 sur le push indique livraison et accusé réussis.
PUSH_PROMISE [stream 13; promised stream 82] +END_HEADERS
:method = GET
:path = /message/qDIYHNcfAIPP_5ITvURr-d6BGt
:authority = push.example.net
HEADERS [stream 82] +END_STREAM
+END_HEADERS
:status = 204
date = Thu, 11 Dec 2014 23:56:56 GMT
Si le user agent n'accuse pas et que le service abandonne avant l'expiration, il MUST pousser 410 (Gone).