Clarification on HTTP/QUIC Unidirectional Streams
Samuel Hurst <samuelh@rd.bbc.co.uk> Wed, 17 October 2018 16:23 UTC
Return-Path: <samuelh@rd.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 35543130DEF for <quic@ietfa.amsl.com>; Wed, 17 Oct 2018 09:23:41 -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 LUyYoUUrneV5 for <quic@ietfa.amsl.com>; Wed, 17 Oct 2018 09:23:39 -0700 (PDT)
Received: from gateh.kw.bbc.co.uk (gateh.kw.bbc.co.uk [132.185.132.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 17EA9130DEC for <quic@ietf.org>; Wed, 17 Oct 2018 09:23:38 -0700 (PDT)
Received: from mailhub1.rd.bbc.co.uk ([172.29.120.129]) by gateh.kw.bbc.co.uk (8.14.5+Sun/8.13.6) with ESMTP id w9HGNaLD010373 for <quic@ietf.org>; Wed, 17 Oct 2018 17:23:36 +0100 (BST)
Received: from rd015072.rd.bbc.co.uk ([172.29.91.136]:35036) by mailhub1.rd.bbc.co.uk with esmtp (Exim 4.84_2) (envelope-from <samuelh@rd.bbc.co.uk>) id 1gCobg-00089i-DK for quic@ietf.org; Wed, 17 Oct 2018 17:23:36 +0100
From: Samuel Hurst <samuelh@rd.bbc.co.uk>
Subject: Clarification on HTTP/QUIC Unidirectional Streams
To: IETF QUIC WG <quic@ietf.org>
Message-ID: <272107b2-8136-48cc-f429-efcea1231d78@rd.bbc.co.uk>
Date: Wed, 17 Oct 2018 17:23:36 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.2.1
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"; format="flowed"
Content-Language: en-GB
Content-Transfer-Encoding: 7bit
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic/assCVGvT2Cl7wPk_zFeOrVI9UP4>
X-BeenThere: quic@ietf.org
X-Mailman-Version: 2.1.29
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, 17 Oct 2018 16:23:41 -0000
Hi All, Apologies if this question has been asked before, but I'd just like to check that my understanding of something is correct and searching back through the list has not answered my question. Given that HTTP/QUIC requires each peer in a connection to open a unidirectional control stream when a connection begins, I think it's safe to assume that streams 2 and 3 will be the control streams. Now, a client will make a request on Stream 0, which will include some QPACK HEADERS, and the odds are that some of those headers will be poked into the dynamic table (I'm thinking of the User-Agent as a prime candidate for this). However, as I understand it, QPACK requires two unidirectional control streams for the encode (type 'H') and decode (type 'h'). And this is per encode-decode pair, so there will be another pair of unidirectional control streams for the encode and decode of the server's response headers. So in my head, the current state of streams in use is thus: Stream 0 - Client Request Stream 2 - Client Control Stream Stream 3 - Server Control Stream Stream 6 - Client Headers QPACK Encoder Stream Stream 7 - Client Headers QPACK Decoder Stream Stream 10 - Server Headers QPACK Decoder Stream Stream 11 - Server Headers QPACK Encoder Stream So, if as part of the request made in stream 0, the server decides to send a PUSH_PROMISE frame, and then once acknowledged by the client the server begins the server push immediately, is is a safe assumption to make that the first server push stream will be on stream 15? I also don't think there's anything to stop a server from sending a PUSH_PROMISE frame before it's even sent a HEADERS frame back for the initial request, so in that case would the server push end up on stream 11, the server headers encoder stream ends up on stream 15 and the decoder stream stays on stream 10? I'm just trying to get it into my head exactly what the expected lay of the land will be during a running HTTP/QUIC session. It's been a while since I last looked at the QUIC drafts and I'm jumping ahead through several revisions so it's possible that I've missed something. Best Regards, Sam
- Clarification on HTTP/QUIC Unidirectional Streams Samuel Hurst
- Re: Clarification on HTTP/QUIC Unidirectional Str… Mikkel Fahnøe Jørgensen
- Re: Clarification on HTTP/QUIC Unidirectional Str… Dmitri Tikhonov
- Re: Clarification on HTTP/QUIC Unidirectional Str… Mikkel Fahnøe Jørgensen
- Re: Clarification on HTTP/QUIC Unidirectional Str… Samuel Hurst
- Re: Clarification on HTTP/QUIC Unidirectional Str… Mikkel Fahnøe Jørgensen