[Webpush] Time to live for push messages

Martin Thomson <martin.thomson@gmail.com> Fri, 20 February 2015 07:11 UTC

Return-Path: <martin.thomson@gmail.com>
X-Original-To: webpush@ietfa.amsl.com
Delivered-To: webpush@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 01BD61A1A06 for <webpush@ietfa.amsl.com>; Thu, 19 Feb 2015 23:11:59 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -0.101
X-Spam-Level:
X-Spam-Status: No, score=-0.101 tagged_above=-999 required=5 tests=[BAYES_40=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, SPF_PASS=-0.001] autolearn=ham
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id eVVxIO95gTu8 for <webpush@ietfa.amsl.com>; Thu, 19 Feb 2015 23:11:57 -0800 (PST)
Received: from mail-ob0-x22a.google.com (mail-ob0-x22a.google.com [IPv6:2607:f8b0:4003:c01::22a]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 1A44C1A1A95 for <webpush@ietf.org>; Thu, 19 Feb 2015 23:11:57 -0800 (PST)
Received: by mail-ob0-f170.google.com with SMTP id va2so22590083obc.1 for <webpush@ietf.org>; Thu, 19 Feb 2015 23:11:56 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type; bh=g8ePm41bXwJ3VDY2vuDHMk+X5yxkB2ztfDpDziw255s=; b=ochJW606eyLd1e/yQrumKtcCDDnGgL4FGs2OmATcL1yLnJuwx2ECdTlfPU0thdO/yc cxq9dDstDNA7TxE3PFt6ZQ1/77U2iVwrz7nHnJcXRlg0P29q73wwzmwhP4bPi3ZYxhp0 qH2jTKQkmfajxvGyQ8bTpXj1cj41ww68hACi0MM05er5eGTjTdzUg72s7mSBlJbDsurD M4tIrO85o9/hMB/RcVoJpApyzHdei8vt+D6tqutoNaEqQdX3niETybEJO0O1i2rm0Q/o XMkiLxsgaAFDMUV4+bz4CHhXxBChkXJweM5HmwYwqO0DcZr7dvRcY3fGFuHCeb0LC9cg rIqg==
MIME-Version: 1.0
X-Received: by 10.202.185.198 with SMTP id j189mr5362053oif.72.1424416316391; Thu, 19 Feb 2015 23:11:56 -0800 (PST)
Received: by 10.202.225.135 with HTTP; Thu, 19 Feb 2015 23:11:56 -0800 (PST)
Date: Fri, 20 Feb 2015 20:11:56 +1300
Message-ID: <CABkgnnX6rGfY99YX1RC+mxwAsVw0=gC1wjyZGCpZ3h+QQntehA@mail.gmail.com>
From: Martin Thomson <martin.thomson@gmail.com>
To: "webpush@ietf.org" <webpush@ietf.org>
Content-Type: text/plain; charset="UTF-8"
Archived-At: <http://mailarchive.ietf.org/arch/msg/webpush/LCvbP2rnVS5J1TRNdk833SRJ-o0>
Subject: [Webpush] Time to live for push messages
X-BeenThere: webpush@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: Discussion of potential IETF work on a web push protocol <webpush.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/webpush>, <mailto:webpush-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/webpush/>
List-Post: <mailto:webpush@ietf.org>
List-Help: <mailto:webpush-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/webpush>, <mailto:webpush-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 20 Feb 2015 07:11:59 -0000

A common problem with push message delivery services looks like this:

1. A push is requested by an application server.
2. The user agent is offline temporarily, so the push service stores
the message.
3. The user agent returns long after the event is interesting, but the
message is delivered anyway.
4. The user agent acts on a message that is now useless, and which
could be harmful.

This is particularly annoying for something like a call notification,
which might be delivered well after the caller gives up on the call.
For these, an application can add its own suppression mechanisms.
Though manual suppression introduces a trade-off between risk of
showing a dead alert and added latency.  Also, there isn't anything
that can be done about the battery power that was spent in delivering
the useless message.

So, most systems implement a suppression system at the push service,
where an application server can indicate that a message should not be
delivered after some point in time.  (I've seen one with suppression
that occurs only at the client, but that was spectacularly
unsuccessful.)

The trick here is in working out how to express this.  I see a few options:

A. RFC 4918 describes a Timeout header field, which has semantics that
apply only to the LOCK method.  That could be extended to apply to
PUT.

B. A new header field could be defined to carry the information.  This
would have the same semantics as the above.

C. We could start to explore message payloads.

I prefer the header field options, with a slight preference for
reusing Timeout (even if that means updating RFC 4918).   The precise
semantics would need a little work, but here's a straw man outline:

   The Timeout header field applies to unsafe requests only.  The
client indicates that changes to the state of a resource as a result
of processing the request are to be reset after the described interval
elapses.  The state that the resource is reset *to* is undefined, for
a number of reasons: not all resources will know and support this
header field, some changes might be irreversible, servers are always
free to set the state of a resource to whatever they like, and it
would be nice to avoid the complexity of having multiple interacting
layers of timeout.

You will note that this is compatible with the definition of Timeout
as defined in RFC 4918, including the fact that the server can do
nothing with the lock at the timeout expiration time.

The final consideration here is whether this is something that needs
to enter the core specification, or whether it would be better as a
separate specification.  I have no opinion on that.