Re: [quicwg/base-drafts] Unidirectional Streams (#643)

Lucas Pardue <notifications@github.com> Wed, 21 June 2017 11:31 UTC

Return-Path: <bounces+848413-a050-quic-issues=ietf.org@sgmail.github.com>
X-Original-To: quic-issues@ietfa.amsl.com
Delivered-To: quic-issues@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id DEA261319EF for <quic-issues@ietfa.amsl.com>; Wed, 21 Jun 2017 04:31:15 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -4.8
X-Spam-Level:
X-Spam-Status: No, score=-4.8 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, RCVD_IN_MSPIKE_H2=-2.8, RP_MATCHES_RCVD=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=github.com
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 wNAepXYlvC-a for <quic-issues@ietfa.amsl.com>; Wed, 21 Jun 2017 04:31:13 -0700 (PDT)
Received: from o6.sgmail.github.com (o6.sgmail.github.com [192.254.113.101]) (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 E7862131A31 for <quic-issues@ietf.org>; Wed, 21 Jun 2017 04:31:12 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=github.com; h=from:reply-to:to:cc:in-reply-to:references:subject:mime-version:content-type:content-transfer-encoding:list-id:list-archive:list-post:list-unsubscribe; s=s20150108; bh=SC5Cc45KnXL7F8e0yKxMmNYp8fY=; b=XWhNYgRIZ7B3c9jc +EwVQtXdUGW4BjvhhbDwjNO9opYMW7YE+1q9Of9Hn5FX8mnXeyOYaUUbcJK6MJff q6hilAuIVHlt9LjXhJHrpif/D92owdpjugfZHGU/DvK+5/VI0Zo+pnodCUHAZH8U GcUtHkvbXJnkiVJBUQApBNvBAFU=
Received: by filter0454p1mdw1.sendgrid.net with SMTP id filter0454p1mdw1-23085-594A58FF-4E 2017-06-21 11:31:11.558871648 +0000 UTC
Received: from github-smtp2b-ext-cp1-prd.iad.github.net (github-smtp2b-ext-cp1-prd.iad.github.net [192.30.253.17]) by ismtpd0002p1iad1.sendgrid.net (SG) with ESMTP id OA9txTeXSfCFqF6GlufesQ for <quic-issues@ietf.org>; Wed, 21 Jun 2017 11:31:11.456 +0000 (UTC)
Date: Wed, 21 Jun 2017 04:31:11 -0700
From: Lucas Pardue <notifications@github.com>
Reply-To: quicwg/base-drafts <reply+0166e4abe34861cc3c620aba786b54178a0a1a2a164f879a92cf0000000115621aff92a169ce0e21ecbf@reply.github.com>
To: quicwg/base-drafts <base-drafts@noreply.github.com>
Cc: Subscribed <subscribed@noreply.github.com>
Message-ID: <quicwg/base-drafts/pull/643/review/45396112@github.com>
In-Reply-To: <quicwg/base-drafts/pull/643@github.com>
References: <quicwg/base-drafts/pull/643@github.com>
Subject: Re: [quicwg/base-drafts] Unidirectional Streams (#643)
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary="--==_mimepart_594a58ff53c48_33553fb9419d7c38887bd"; charset="UTF-8"
Content-Transfer-Encoding: 7bit
Precedence: list
X-GitHub-Sender: LPardue
X-GitHub-Recipient: quic-issues
X-GitHub-Reason: subscribed
X-Auto-Response-Suppress: All
X-GitHub-Recipient-Address: quic-issues@ietf.org
X-SG-EID: l64QuQ2uJCcEyUykJbxN122A6QRmEpucztpreh3Pak2UWo/727+XIU4YKnavUcuvleiYfozS3sYE01 u9ib1MRPx9xd+PqUmRk80gX6L5UjswHldHlCVe183QbwCie4r/lm0stPzB+jnPbTjA5E6nigtoKNjh y1Q4Z20UqJBdy88UH8g/CY0+e3gc8g9ZVoPVDW1mip8qiccOi87h4GxK2xhmT/h5ZiM85ZccIO2bK7 Y=
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic-issues/5QqmW8ENg8gnSmlSbG_YjcqLiDk>
X-BeenThere: quic-issues@ietf.org
X-Mailman-Version: 2.1.22
List-Id: Notification list for GitHub issues related to the QUIC WG <quic-issues.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/quic-issues>, <mailto:quic-issues-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/quic-issues/>
List-Post: <mailto:quic-issues@ietf.org>
List-Help: <mailto:quic-issues-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/quic-issues>, <mailto:quic-issues-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 21 Jun 2017 11:31:16 -0000

LPardue commented on this pull request.



>  
-##  Stream 1: Connection Control Stream
+~~~~~
+ 0                   1                   2                   3
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
++-+-+-+-+-+-+-+-+
+|   Type (8)    |
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+|                         Push ID (32)                          |
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+~~~~~

It seems this diagram is missing the 16-bit index value described in the text.

> +The stream header for a response stream contains the type octet, which is set to
+0x01, and the stream ID of the request stream that this response is for as a
+32-bit value.
+
+~~~~~
+ 0                   1                   2                   3
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
++-+-+-+-+-+-+-+-+
+|   Type (8)    |
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+|                        Stream ID (32)                         |
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+~~~~~
+
+After the stream header, response streams contain a sequence of frames (see
+{{http-framing-layer}}).

Not sure where the `http-framing-layer` link is supposed to take us to.

>  
 HTTP/QUIC uses the priority scheme described in {{!RFC7540}} Section 5.3. In
-this priority scheme, a given stream can be designated as dependent upon another
-stream, which expresses the preference that the latter stream (the "parent"
-stream) be allocated resources before the former stream (the "dependent"
-stream). Taken together, the dependencies across all streams in a connection
-form a dependency tree. The structure of the dependency tree changes as PRIORITY
-frames add, remove, or change the dependency links between streams.
+this priority scheme, a given request can be designated as dependent upon
+another request, which expresses the preference that the latter stream (the
+"parent" request) be allocated resources before the former stream (the
+"dependent" request). Taken together, the dependencies across all request in a

nit: the dependencies across all request**s**

>  
 HTTP/QUIC uses the priority scheme described in {{!RFC7540}} Section 5.3. In
-this priority scheme, a given stream can be designated as dependent upon another
-stream, which expresses the preference that the latter stream (the "parent"
-stream) be allocated resources before the former stream (the "dependent"
-stream). Taken together, the dependencies across all streams in a connection
-form a dependency tree. The structure of the dependency tree changes as PRIORITY
-frames add, remove, or change the dependency links between streams.
+this priority scheme, a given request can be designated as dependent upon
+another request, which expresses the preference that the latter stream (the
+"parent" request) be allocated resources before the former stream (the
+"dependent" request). Taken together, the dependencies across all request in a
+connection form a dependency tree. The structure of the dependency tree changes
+as PRIORITY frames add, remove, or change the dependency links between request.

nit: the dependency links between request**s**

> -
-The data stream MUST be half-closed immediately after the transfer of the body.
-If the message does not contain a body, the corresponding data stream MUST still
-be half-closed without transferring any data. The "chunked" transfer encoding
-defined in Section 4.1 of {{!RFC7230}} MUST NOT be used.
+response may contain zero or more header blocks on the response stream
+containing the message headers of informational (1xx) HTTP responses (see
+{{!RFC7230}}, Section 3.2 and {{!RFC7231}}, Section 6.2).
+
+A message that contains a payload body includes a HAS_BODY frame immediately
+after the first header block.  This indicates that another stream will include
+the payload body.  A data stream is opened to carry the payload body.  The data
+stream MUST be closed immediately after sending the body.  If the message does
+not contain a body, a data stream MUST NOT be opened and the HAS_BODY message
+MUST NOT be sent.  The "chunked" transfer encoding defined in Section 4.1 of
+{{!RFC7230}} MUST NOT be used.
 
 Trailing header fields are carried in an additional header block on the message
 control stream. Such a header block is a sequence of HEADERS frames with End

Sending trailing header fields on the control stream seems like a hangover from earlier design.

>  
-The server push response is conveyed in the same way as a non-server-push
-response, with response headers and (if present) trailers carried by HEADERS
-frames sent on the control stream, and response body (if any) sent via the
-corresponding data stream.
+The server push response is conveyed on a push stream.  Aside from the stream
+header, which identifies the response stream and PUSH_PROMISE frame, a push
+stream is identical to a regular response stream ({{stream-response}}), with
+response headers and (if present) trailers carried by HEADERS frames sent on the
+control stream, and response body (if any) indicated with a HAS_BODY frame and

My reading of the design is that trailing header fields would be carried on the push stream, not the control stream.

> @@ -401,6 +547,14 @@ All frames have the following format:
 
 ## Frame Definitions {#frames}
 
+### HAS_BODY {#frame-has-body}
+
+The HAS_BODY frame indicates that the HTTP message contains a payload body.  It

Is it missing a frame type?

> @@ -712,6 +936,21 @@ HTTP_MULTIPLE_SETTINGS (0x10):
 HTTP_RST_CONTROL_STREAM (0x11):
 : A message control stream closed abruptly.
 
+HTTP_INVALID_STREAM_HEADER (0x12):
+: A stream header contained an unknown type or referenced an invalid stream.
+
+HTTP_UNMATCHED_RESPONSE (0x13):
+: A response stream referenced an invalid stream.
+
+HTTP_UNMATCHED_DATA (0x14):
+: A data stream referenced an invalid stream.
+
+HTTP_UNMATCHED_PUSH (0x15):
+: A push stream referenced an server push request.

nit: **a** server push request

> @@ -758,8 +997,8 @@ QUIC simply by replacing Stream 0 in HTTP/2 with Stream 1 in HTTP/QUIC.
 Below is a listing of how each HTTP/2 frame type is mapped:
 
 DATA (0x0):
-: Instead of DATA frames, HTTP/QUIC uses a separate data stream.  See
-  {{stream-mapping}}.
+: Instead of DATA frames, HTTP/QUIC uses a separate data stream.  The code point
+  for DATA frames is used for the HAS_BODY frame. See {{frame-has-body}}.

Maybe this answers my earlier question about HAS_BODY type?

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/643#pullrequestreview-45396112