[Webpush] comments on latest draft-thomson-webpush-protocol-00

Benjamin Bangert <bbangert@mozilla.com> Thu, 09 July 2015 18:58 UTC

Return-Path: <bbangert@mozilla.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 E42D21B2B57 for <webpush@ietfa.amsl.com>; Thu, 9 Jul 2015 11:58:49 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -0.577
X-Spam-Level:
X-Spam-Status: No, score=-0.577 tagged_above=-999 required=5 tests=[AC_DIV_BONANZA=0.001, BAYES_05=-0.5, FM_FORGED_GMAIL=0.622, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7, 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 S3iPvNNKKxMJ for <webpush@ietfa.amsl.com>; Thu, 9 Jul 2015 11:58:42 -0700 (PDT)
Received: from mail-wi0-f174.google.com (mail-wi0-f174.google.com [209.85.212.174]) (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 681331A2182 for <webpush@ietf.org>; Thu, 9 Jul 2015 11:58:42 -0700 (PDT)
Received: by wiga1 with SMTP id a1so320872652wig.0 for <webpush@ietf.org>; Thu, 09 Jul 2015 11:58:41 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:date:message-id:subject:from:to :content-type; bh=QzQpC0iQ/x1pw8voQOZ9lPFmCRPXckqExvnSYgorK6M=; b=FLXdulJSklAvJiLybl74CtXcvNoxlALfQPxgYwhLs1g3GaahzZ2SKZJN5ngz5rH8iD TP/F+GLzUeyECpScBFjpvxFTjs0smcsG8rTYWwUpaSIL9Pw/Orq5HX5Brxz2jG6AlqR4 PZ6cbmDnXyezg8sqh7aIsOR/E+baxaMBlgu0WoWcS9WMq+KWc2H+bMaHCKEAWPc/743v zsPfTpL7+WPfDKRSDl39ZrWfePnvhMFcjcqD+hH+uxmXNCgucOtoy6YNmFBlfH7LGLw7 1L/pbBf3GB8Wm42Nf0EU1guO5bAGjmQ28NdpNTCqGuqDLYRsDRR+rEVq0mfBfgXnKf9G 5++Q==
X-Gm-Message-State: ALoCoQkLlSpuivowDzioeodidkF/M3vtj/nddUs0nOcgAT0gIHjcwobiwL5lQ5OFqfwKAzyXvC61
MIME-Version: 1.0
X-Received: by 10.194.23.36 with SMTP id j4mr33438473wjf.105.1436468321012; Thu, 09 Jul 2015 11:58:41 -0700 (PDT)
Received: by 10.27.215.213 with HTTP; Thu, 9 Jul 2015 11:58:40 -0700 (PDT)
Date: Thu, 09 Jul 2015 11:58:40 -0700
Message-ID: <CABp8EuL8E3usn5bbcaZjQDGD26sFOh18-AugQ-3UPTMG_aTNbQ@mail.gmail.com>
From: Benjamin Bangert <bbangert@mozilla.com>
To: "webpush@ietf.org" <webpush@ietf.org>
Content-Type: multipart/alternative; boundary="047d7b3a91b2018cb9051a75d88b"
Archived-At: <http://mailarchive.ietf.org/arch/msg/webpush/HcTPdM5uv1HRnqldAOWTs8ClnTI>
Subject: [Webpush] comments on latest draft-thomson-webpush-protocol-00
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: <https://mailarchive.ietf.org/arch/browse/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: Thu, 09 Jul 2015 18:58:50 -0000

-Sec 3: Subscribing
What should be done if a client has subscribed to as many subscriptions as
a server will allow per authenticated-client?

"The push server MUST provide a URI for the push resource corresponding to
the push message subscription using a link relation of type
"urn:ietf:params:push"."

Can this be the same push resource for a single authenticated client?
Explanation for this in next bit.

-Sec 6: Receiving Push Messages

This section appears to require a GET for every single subscription. If you
have 80 subscriptions, upon connect, you will send 80 GET's. Also, for the
server to maintain all your subscriptions, and optionally subscription
expiration information, can make a significant impact on the per-connection
memory overhead as all this state will need to be maintained on the server
handling all these subscriptions.

Just as the receipt subscription URL is likely to be the same for the
service as a whole, I would propose allowing a Push Service to provide an
authenticated client a single push subscription URL for all subscriptions
for that client (the Location handed to App-Servers would of course vary
for each subscription). The Push Promise path would then need to be the
Location given out, so that the client could determine which subscription
each message is for.

This would allow for a single GET on connect, to begin receiving all
notifications, for all subscriptions the client has setup previously. The
client would need to realize that if it is already monitoring a
subscription for notifications, and subscribes to another that has the same
URL, then it should start expecting those notifications to be associated
with the existing http2 stream.

As this section currently stands, its quite a bit of data to resume
subscription flow on a disconnect, which would be very expensive for mobile
clients.

Having a per-client subscription resource for *all subscriptions* would
allow clients to resume notification flow faster on disconnect, with lower
server resource overhead as the entire flow of notifications can resume on
a reconnect without waiting for all the individual subscription GET's. It
would also help avoid server overloading when large batches of clients come
online/offline at once (1k clients at 80 subscriptions each connecting at
once is a quick 80k hits, etc.).

This change would require 7.3 to be updated, so that expiration of
subscriptions can be communicated in some other manner, and the client
could DELETE them in some other manner.


"A 204 (No Content) status code with no associated server pushes indicates
that no messages are presently available. This could be because push
messages have expired."

This seems to indicate that a response will be returned for a GET to a push
subscription if there are no messages, once a response has been returned
though, no push promise frames for that GET can be sent (as far as I
understand http2 stream semantics at least). If there's no messages for a
push subscription, is the intention that a 204 is sent, or that its kept
open for push promise frames for eventual notifications?

-Sec 6.2: Receiving Push Message Receipts

If an application server has sent substantial quantities of notifications,
all with push receipts, and has failed to take any action to clear its
receipt queue, what should be done to indicate to the App-Server that it
isn't allowed to send any more until it clears out its receipt queue?

It feels like there should be some way to indicate this, as its possible
the App-Server is malfunctioning rather than is being a bad actor.

Cheers,
Ben