RE: PUSH_HEADERS frame

Lucas Pardue <Lucas.Pardue@bbc.co.uk> Thu, 21 June 2018 00:30 UTC

Return-Path: <Lucas.Pardue@bbc.co.uk>
X-Original-To: quic@ietfa.amsl.com
Delivered-To: quic@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 3A961130EE0 for <quic@ietfa.amsl.com>; Wed, 20 Jun 2018 17:30:44 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -4.2
X-Spam-Level:
X-Spam-Status: No, score=-4.2 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
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 2YUYOIJcB2VQ for <quic@ietfa.amsl.com>; Wed, 20 Jun 2018 17:30:42 -0700 (PDT)
Received: from mailout1.telhc.bbc.co.uk (mailout1.telhc.bbc.co.uk [132.185.161.180]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 1F48F130EDB for <quic@ietf.org>; Wed, 20 Jun 2018 17:30:41 -0700 (PDT)
Received: from BGB01XI1008.national.core.bbc.co.uk (bgb01xi1008.national.core.bbc.co.uk [10.161.14.22]) by mailout1.telhc.bbc.co.uk (8.15.2/8.15.2) with ESMTP id w5L0UYvZ005821; Thu, 21 Jun 2018 01:30:34 +0100 (BST)
Received: from BGB01XUD1012.national.core.bbc.co.uk ([10.161.14.10]) by BGB01XI1008.national.core.bbc.co.uk ([10.161.14.22]) with mapi id 14.03.0389.001; Thu, 21 Jun 2018 01:30:34 +0100
From: Lucas Pardue <Lucas.Pardue@bbc.co.uk>
To: Martin Thomson <martin.thomson@gmail.com>, Mike Bishop <mbishop@evequefou.be>
CC: Roberto Peon <fenix@fb.com>, QUIC WG <quic@ietf.org>
Subject: RE: PUSH_HEADERS frame
Thread-Topic: PUSH_HEADERS frame
Thread-Index: AdQItM9/wr2FRkmcSU6cCT2bnOJHwAACdGVFAAJIJNAACF8SAAAC5KUl
Date: Thu, 21 Jun 2018 00:30:33 +0000
Message-ID: <7CF7F94CB496BF4FAB1676F375F9666A3BB5B115@bgb01xud1012>
References: <BYAPR08MB3944A37B3230FAAA5448E16EDA770@BYAPR08MB3944.namprd08.prod.outlook.com> <7CF7F94CB496BF4FAB1676F375F9666A3BB58F3A@bgb01xud1012> <BYAPR08MB394439B73E6495D7DCD09ECFDA770@BYAPR08MB3944.namprd08.prod.outlook.com>, <CABkgnnU12bHq_OOz26EVjyGnaf41+VGCqriOk6sO8zZJkA83Ug@mail.gmail.com>
In-Reply-To: <CABkgnnU12bHq_OOz26EVjyGnaf41+VGCqriOk6sO8zZJkA83Ug@mail.gmail.com>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-originating-ip: [172.19.161.212]
x-exclaimer-md-config: c91d45b2-6e10-4209-9543-d9970fac71b7
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic/dvdE8b9Xzvmr-rKVZb0cOTKDZRY>
X-BeenThere: quic@ietf.org
X-Mailman-Version: 2.1.26
Precedence: list
List-Id: Main mailing list of the IETF QUIC working group <quic.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/quic>, <mailto:quic-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/quic/>
List-Post: <mailto:quic@ietf.org>
List-Help: <mailto:quic-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/quic>, <mailto:quic-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 21 Jun 2018 00:30:44 -0000

Well, I only partially buy the simplicity from reusing HEADERS. The client has juggling to do to parse push ID in order to correlate the response with request - I'd argue whether it is done inside or outside the frame equally trivial.

Anecdotally, when explaning HTTP/QUIC server push to an audience not tracking WG progress so closely, it has struck people as quite a departure from H2 and GQUIC (for the better I might add). FWIW I think typed streams would make communication easier, as it makes the capability more conspicuous.

Lucas
________________________________________
From: Martin Thomson [martin.thomson@gmail.com]
Sent: 21 June 2018 00:51
To: Mike Bishop
Cc: Lucas Pardue; Roberto Peon; QUIC WG
Subject: Re: PUSH_HEADERS frame

I agree with Mike.  FWIW, implementing push is trivial as a result of
it using the same framing as requests and responses; I would be
opposed to changing that.
On Thu, Jun 21, 2018 at 4:58 AM Mike Bishop <mbishop@evequefou.be> wrote:
>
> Philosophically, I'd go a step further and say that, as in the PR, the semantics of the stream are entirely determined by the type byte.  Any internal divisions of regions within the bytestream are as needed by that type and defined by it.  Some, like the QPACK stream, won't actually need divided regions.
>
> The fact that push streams and control streams subdivide their regions using frames from the same type space as request streams is somewhere between a convenience due to push's similarity to things we already have (responses) and a historical legacy of H2.  There's no reason they would need to do so; there's just also no real reason to change.
>
> -----Original Message-----
> From: Lucas Pardue [mailto:Lucas.Pardue@bbc.co.uk]
> Sent: Wednesday, June 20, 2018 11:28 AM
> To: Mike Bishop <mbishop@evequefou.be>; Martin Thomson <martin.thomson@gmail.com>; Roberto Peon <fenix@fb.com>
> Cc: QUIC WG <quic@ietf.org>
> Subject: RE: PUSH_HEADERS frame
>
> Thanks for the feedback. To be clear, I'm in favor of typed streams but to play devils advocate.
>
> > Unidirectional streams aren't required to use HTTP/QUIC frames;
>
> QPACK aside, the only examples we have use frames. So the question is: do we think it is in scope to support un-framed STREAM bytes as an HTTP/QUIC extension point?
>
> Back to PUSH_HEADERS, the change is a subtle one. I'd highlight the Header Block, which presently has two bearer frames HEADERS and PUSH_PROMISE. The main difference with push is that the stream ID cannot be used to correlate request and response. So we use a push ID that is framed everywhere *except* the push delivery stream. PUSH_HEADERS is a more honest approach to this quirk (at some small framing inconvenience), everything relevant to the Header Block is bundled together. It acts as a stream reservation mechanism that ties push response data, with request and response headers.
>
> It doesn't change much:
>
> Untyped streams (today): push ID + HEADERS + DATA (+ HEADERS) Typed streams: stream type byte + push ID + HEADERS + DATA (+ HEADERS) Untyped and framed streams:  PUSH_HEADERS (including push ID) + DATA (+HEADERS)
>
> I could try to make a weak argument that framing helps because you could at least skip over frames if you get their length but not the rest. The current design requires the full push ID to be received before HEADERS and DATA processing.
>
> Lucas