RE: PUSH_HEADERS frame

Lucas Pardue <Lucas.Pardue@bbc.co.uk> Wed, 20 June 2018 18:28 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 8F06B130E02 for <quic@ietfa.amsl.com>; Wed, 20 Jun 2018 11:28:01 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -4.201
X-Spam-Level:
X-Spam-Status: No, score=-4.201 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-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 8-JQMqSWK3Ha for <quic@ietfa.amsl.com>; Wed, 20 Jun 2018 11:28:00 -0700 (PDT)
Received: from mailout0.cwwtf.bbc.co.uk (mailout0.cwwtf.bbc.co.uk [132.185.160.179]) (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 28086130DFA for <quic@ietf.org>; Wed, 20 Jun 2018 11:27:59 -0700 (PDT)
Received: from BGB01XI1007.national.core.bbc.co.uk (bgb01xi1007.national.core.bbc.co.uk [10.161.14.21]) by mailout0.cwwtf.bbc.co.uk (8.15.2/8.15.2) with ESMTP id w5KIRbJR012404; Wed, 20 Jun 2018 19:27:37 +0100 (BST)
Received: from BGB01XUD1012.national.core.bbc.co.uk ([10.161.14.10]) by BGB01XI1007.national.core.bbc.co.uk ([10.161.14.21]) with mapi id 14.03.0389.001; Wed, 20 Jun 2018 19:27:37 +0100
From: Lucas Pardue <Lucas.Pardue@bbc.co.uk>
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
Thread-Topic: PUSH_HEADERS frame
Thread-Index: AdQItM9/wr2FRkmcSU6cCT2bnOJHwAACdGVF
Date: Wed, 20 Jun 2018 18:27:36 +0000
Message-ID: <7CF7F94CB496BF4FAB1676F375F9666A3BB58F3A@bgb01xud1012>
References: <BYAPR08MB3944A37B3230FAAA5448E16EDA770@BYAPR08MB3944.namprd08.prod.outlook.com>
In-Reply-To: <BYAPR08MB3944A37B3230FAAA5448E16EDA770@BYAPR08MB3944.namprd08.prod.outlook.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
x-tm-as-product-ver: SMEX-12.5.0.1300-8.2.1013-23920.001
x-tm-as-result: No-7.569200-8.000000-10
x-tmase-matchedrid: QW5G6BKkLTq7lpQUW6Uvz7iMC5wdwKqdwZLXS0hN8p0z7Q5F3647KI4+ prdZfxRmOc2zxuS7VoTi6aYiETc/RHKgzS9kU8wE6/xAZojbl7dQCOsAlaxN70+0uGVOF08Q/ue nWPEZxJyf/ayjPGtsEV6jD9X3nXNS6IXGykEpO3em/Bn0aZ3AM0rh/hn4JkBnyL0CMroLynUr1p Erez50TP8lqKDjhCPxoOydO6sfhDXESC2hdca5cs+ayFtEW0uYLAnNohUyMa0Ul9bvAS7WQLogb MqBj3ntg3KrVoJXYdNftuJwrFEhTVUqh/e/yPQx3QfwsVk0UbtuRXh7bFKB7iTFYUPSkR1hmqhp DzR9MwjvnKjgiJiIPq2l90rUNkkZsBTJSD2iAW0=
x-tm-as-user-approved-sender: Yes
x-tm-as-user-blocked-sender: No
x-tmase-result: 10--7.569200-8.000000
x-tmase-version: SMEX-12.5.0.1300-8.2.1013-23920.001
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/GxKKPEWU8VBIfT2bfFdJxnXgtN0>
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: Wed, 20 Jun 2018 18:28:02 -0000

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