Aller au contenu principal

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).