Passa al contenuto principale

6. Receiving Push Messages for a Subscription

6. Receiving Push Messages for a Subscription

L'user agent richiede nuovi push message con GET sulla risorsa push message subscription. Il push service non risponde a tale richiesta; usa HTTP/2 server push [RFC7540] per inviare i contenuti quando i server applicativi inviano messaggi.

L'user agent MAY includere Urgency. Il servizio MUST NOT consegnare messaggi meno urgenti del valore dell'intestazione (tabella 1).

Ogni messaggio è inviato come risposta a una GET sintetica in PUSH_PROMISE verso la risorsa push message creata dal servizio. Le intestazioni di risposta SHOULD includono un link urn:ietf:params:push alla push resource dell'abbonamento. Il corpo è l'entity body dell'ultima richiesta POST alla push resource.

HEADERS      [stream 7] +END_STREAM +END_HEADERS
:method = GET
:path = /subscription/LBhhw0OohO-Wl4Oi971UG
: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
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

Con Prefer [RFC7240] e wait=0, il servizio MUST generare subito server push per tutti i messaggi non ancora consegnati. 204 senza push indica che non ci sono messaggi disponibili (forse scaduti).

6.1. Receiving Push Messages for a Subscription Set

Se è disponibile un insieme, l'user agent SHOULD usarlo per monitorare anziché singoli abbonamenti.

GET sulla risorsa push message subscription set si comporta analogamente; la GET sintetica MUST fornire il link urn:ietf:params:push per distinguere la sorgente.

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

Con Prefer [RFC7240] e wait=0, il servizio MUST generare server push per tutti i messaggi non ancora consegnati. 204 senza server push associati indica che non ci sono messaggi disponibili (possibilmente scaduti).

6.2. Acknowledging Push Messages

Per garantire almeno una consegna corretta, l'user agent MUST confermare con HTTP DELETE sulla risorsa push message.

DELETE /message/qDIYHNcfAIPP_5ITvURr-d6BGt HTTP/1.1
Host: push.example.net

Se il servizio riceve l'acknowledgment ed era stata richiesta una ricevuta di consegna, MUST restituire 204 al server applicativo che monitora la receipt subscription.

Senza acknowledgment in tempo ragionevole, il messaggio si considera non ancora consegnato. Il servizio SHOULD continuare a riprovare fino alla scadenza annunciata.

Il servizio MAY cessare prima della scadenza (user agent non reattivo, vincoli operativi). Con ricevuta richiesta, MUST allora 410 (Gone) al server in ascolto.

6.3. Receiving Push Message Receipts

Il server applicativo richiede le ricevute con GET sulla receipt subscription. Il servizio usa server push [RFC7540] quando l'user agent ha confermato (6.2).

Ogni ricevuta è risposta a GET sintetica verso la stessa risorsa push message; codice di stato senza dati.

HEADERS      [stream 13] +END_STREAM +END_HEADERS
:method = GET
:path = /receipt-subscription/3ZtI4YVNBnUUZhuoChl6omUvG4ZM
:authority = push.example.net
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

Se l'user agent non conferma e il servizio smette di riprovare prima della scadenza annunciata, MUST inviare in push una risposta di fallimento con stato 410 (Gone).