Zum Hauptinhalt springen

6. Receiving Push Messages for a Subscription

6. Receiving Push Messages for a Subscription

Der User Agent fordert neue Push-Nachrichten mit GET auf die Push-Message-Subscription-Ressource an. Der Push-Dienst antwortet nicht direkt; er nutzt HTTP/2 Server Push [RFC7540], um Inhalte zu senden, sobald Anwendungsserver Nachrichten senden.

Der User Agent MAY Urgency mitsenden. Der Dienst MUST NOT Nachrichten mit geringerer Dringlichkeit als im Header angegeben zustellen (Tabelle 1).

Jede Nachricht wird als Antwort auf eine synthetische GET in PUSH_PROMISE übertragen, adressiert an die vom Dienst erzeugte Push-Message-Ressource. Die Antwortheader SHOULD einen Link urn:ietf:params:push zur push resource des Abonnements enthalten. Der Body entspricht dem letzten POST auf die 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

Mit Prefer [RFC7240] und wait=0 MUST der Dienst sofort Server Push für alle noch nicht zugestellten Nachrichten erzeugen. 204 ohne Pushes bedeutet: keine Nachrichten verfügbar (evtl. abgelaufen).

6.1. Receiving Push Messages for a Subscription Set

Ist eine Menge verfügbar, SHOULD der User Agent diese statt einzelner Abonnements überwachen.

GET auf die Subscription-Set-Ressource verhält sich analog; synthetische GET MUST den Link urn:ietf:params:push enthalten, um die Quelle zu unterscheiden.

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

Mit Prefer [RFC7240] und wait=0 MUST der Dienst Server Push für alle noch nicht zugestellten Nachrichten erzeugen. 204 ohne zugehörige Server Pushes bedeutet, dass derzeit keine Nachrichten verfügbar sind (möglicherweise abgelaufen).

6.2. Acknowledging Push Messages

Mindestens einmalige Zustellung: der User Agent MUST die Nachrichtenressource per HTTP DELETE bestätigen.

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

Empfängt der Dienst die Bestätigung und wurde eine Quittung angefordert, MUST er 204 an den überwachenden Anwendungsserver senden.

Ohne Bestätigung in angemessener Zeit gilt die Nachricht als noch nicht zugestellt. Der Dienst SHOULD bis zur angekündigten Ablaufzeit erneut versuchen.

Der Dienst MAY vor Ablauf aufhören (inaktiver User Agent, Betriebsgrenzen). Mit Quittungsanforderung MUST dann 410 (Gone) an den überwachenden Server.

6.3. Receiving Push Message Receipts

Der Anwendungsserver sendet GET auf die receipt subscription. Der Dienst nutzt Server Push [RFC7540], wenn der User Agent bestätigt hat (6.2).

Jede Quittung ist Antwort auf synthetische GET zur gleichen Push-Message-Ressource; Status ohne Body.

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

Ohne Bestätigung des User Agents und wenn der Dienst vor Ablauf mit Wiederholungen aufhört, MUST er 410 (Gone) pushen.