Subject: [quicwg/base-drafts] HTTP requests on one stream (#692)

From: Mike Bishop <[email-masked]>
Date: Wed, 19 Jul 2017 22:07:07 +0000 (UTC)

Fixes #245 as agreed in Prague.  Keeps HPACK from blowing up on RST_STREAM by fixing the dynamic table size at zero until we replace HPACK.
You can view, comment on, or merge this pull request online at:

  https://github.com/quicwg/base-drafts/pull/692

-- Commit Summary --

  * Everything on one stream (beware HPACK)
  * Replace HPACK Sequence with zero dynamic table size

-- File Changes --

    M draft-ietf-quic-http.md (280)

-- Patch Links --

https://github.com/quicwg/base-drafts/pull/692.patch
https://github.com/quicwg/base-drafts/pull/692.diff

-- 
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/692

---

From: Martin Thomson <[email-masked]>
Date: Thu, 20 Jul 2017 11:55:17 +0000 (UTC)

martinthomson commented on this pull request.

I don't have time to go through this in detail, but I found a couple of things.

> -HTTP does not need to do any separate multiplexing when using QUIC - data sent
-over a QUIC stream always maps to a particular HTTP transaction. Requests and
-responses are considered complete when the corresponding QUIC streams are closed
-in the appropriate direction.
-
-
-##  Stream 1: Connection Control Stream
+the stream management. An HTTP request/response consumes a single stream: This
+means that the client's first request occurs on QUIC stream 3, the second on
+stream 5, and so on. The server's first push consumes stream 2.
+
+This stream carries frames related to the request/response (see {{frames}}).
+When a stream terminates cleanly, if the last frame on the stream was truncated,
+this MUST be treated as a connection error (see HTTP_MALFORMED_* in
+{{http-error-codes}}).  Streams which terminate abruptly may do so at any point
+in the frame.

It's unclear here what you mean by "terminate abruptly".  Do you mean that the stream is reset, or do you mean termination in some other way?

> -responses are considered complete when the corresponding QUIC streams are closed
-in the appropriate direction.
-
-
-##  Stream 1: Connection Control Stream
+the stream management. An HTTP request/response consumes a single stream: This
+means that the client's first request occurs on QUIC stream 3, the second on
+stream 5, and so on. The server's first push consumes stream 2.
+
+This stream carries frames related to the request/response (see {{frames}}).
+When a stream terminates cleanly, if the last frame on the stream was truncated,
+this MUST be treated as a connection error (see HTTP_MALFORMED_* in
+{{http-error-codes}}).  Streams which terminate abruptly may do so at any point
+in the frame.
+
+Streams must be utilized sequentially, with no gaps.  HTTP does not need to do

Our use of streams for server push could be read as violating this.  Because it is the *mention* of a push stream in PUSH_PROMISE that tends to be sequential, whereas the actual *use* of a stream is often not sequential.

(This is not a new thing, maybe we should open a new issue.)

-- 
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/692#pullrequestreview-51165510

---

From: Mike Bishop <[email-masked]>
Date: Thu, 20 Jul 2017 07:13:54 -0700

MikeBishop commented on this pull request.

Regardless, it's a lower-case MUST, so I need to change this to something.  I'll take a look.

-- 
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/692#discussion_r128526561

---

From: Mike Bishop <[email-masked]>
Date: Thu, 20 Jul 2017 18:08:43 +0000 (UTC)

>From the transport draft, RST_STREAM is used "to abruptly terminate a stream."  Basically, I'm saying don't worry about truncated frames in the event of resets.

-- 
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/692#discussion_r128590141

---

From: Mike Bishop <[email-masked]>
Date: Thu, 20 Jul 2017 18:12:53 +0000 (UTC)

@MikeBishop pushed 1 commit.

b5a4d74  Pushes aren't sequential

-- 
You are receiving this because you are subscribed to this thread.
View it on GitHub:
https://github.com/quicwg/base-drafts/pull/692/files/404c5b8ee838042f7269574b608d1b15e2a25fd9..b5a4d743a5729f1ec726a8a7e7c3964a278060c1

---

From: Subodh Iyengar <[email-masked]>
Date: Thu, 20 Jul 2017 11:59:55 -0700

siyengar commented on this pull request.

-Pairs of streams must be utilized sequentially, with no gaps.  The data stream
-is opened at the same time as the message control stream is opened and is closed
-after transferring the body.  The data stream is closed immediately after
-sending the request headers if there is no body.
+the stream management. An HTTP request/response consumes a single stream: This
+means that the client's first request occurs on QUIC stream 3, the second on
+stream 5, and so on. The server's first push consumes stream 2.
+
+This stream carries frames related to the request/response (see {{frames}}).
+When a stream terminates cleanly, if the last frame on the stream was truncated,
+this MUST be treated as a connection error (see HTTP_MALFORMED_* in
+{{http-error-codes}}).  Streams which terminate abruptly may do so at any point
+in the frame.
+
+Streams used for requests MUST be utilized sequentially, with no gaps.  Streams

is this a sender side only restriction, because there doesn't seem to be a way to enforce this on the receiver

-- 
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/692#pullrequestreview-51299278

---

From: ianswett <[email-masked]>
Date: Fri, 21 Jul 2017 12:52:36 +0000 (UTC)

ianswett commented on this pull request.

Thanks Mike, looks great.

Only senders create streams, so by definition, I think that's a yes?  But I agree there's no good way to enforce this.

+used for pushed resources MAY be initiated out-of-order, but stream IDs SHOULD

I don't have a problem with it, but Is there a reason to allow this?

-- 
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/692#pullrequestreview-51463755

---

From: Mike Bishop <[email-masked]>
Date: Mon, 24 Jul 2017 17:57:19 +0000 (UTC)

Artifact of PUSH_PROMISE including a Stream ID.  Servers can fulfill pushes in a different order than they actually promise them, based on its best estimate of priority.  So when you've promised something on streams 2,4,6,8 based on the requested resource but you decide that stream 6's resource is the most important, you actually start sending data on 6 first.

If we pulled out Martin's idea that PUSH_PROMISE specifies an ID rather than a stream, and the push tells you what promise it's answering, then you can tighten up this side since the first stream will just go to the first thing the server wants to send.

-- 
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/692#discussion_r129108513

---

From: ianswett <[email-masked]>
Date: Mon, 24 Jul 2017 11:10:49 -0700

I'm happy as is, thanks for the clarification.

-- 
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/692#discussion_r129111912

---

From: Mike Bishop <[email-masked]>
Date: Mon, 24 Jul 2017 22:04:44 +0000 (UTC)

Do you think it should be a SHOULD, since it's unenforceable?

-- 
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/692#discussion_r129166619

---

From: ianswett <[email-masked]>
Date: Mon, 24 Jul 2017 22:06:41 +0000 (UTC)

I think a SHOULD is appropriate, given it's unenforceable.

-- 
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/692#discussion_r129167108

---

From: Mike Bishop <[email-masked]>
Date: Mon, 24 Jul 2017 15:07:15 -0700

c2d5711  Merge remote-tracking branch 'origin/master' into one_stream

-- 
You are receiving this because you are subscribed to this thread.
View it on GitHub:
https://github.com/quicwg/base-drafts/pull/692/files/b5a4d743a5729f1ec726a8a7e7c3964a278060c1..c2d5711e7a5baaf68237ea3e8ff970b98b850937

---

From: Mike Bishop <[email-masked]>
Date: Mon, 24 Jul 2017 22:33:34 +0000 (UTC)

9c4eb18  SHOULD be sequential

-- 
You are receiving this because you are subscribed to this thread.
View it on GitHub:
https://github.com/quicwg/base-drafts/pull/692/files/c2d5711e7a5baaf68237ea3e8ff970b98b850937..9c4eb1812751c51180ab8711dac2fb0b753ff2be

---

From: Martin Thomson <[email-masked]>
Date: Tue, 25 Jul 2017 01:26:58 +0000 (UTC)

martinthomson approved this pull request.

use the word "reset" then

+Streams SHOULD be utilized sequentially, with no gaps.  Streams used for pushed

https://grammarpartyblog.com/2012/01/17/use-versus-utilize/

-- 
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/692#pullrequestreview-51939271

---

From: Mike Bishop <[email-masked]>
Date: Wed, 26 Jul 2017 11:09:18 -0700

Not new in this PR, but sure.

-- 
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/692#discussion_r129652487

---

From: Mike Bishop <[email-masked]>
Date: Wed, 26 Jul 2017 18:11:58 +0000 (UTC)

97b5d40  utilize and reset

-- 
You are receiving this because you are subscribed to this thread.
View it on GitHub:
https://github.com/quicwg/base-drafts/pull/692/files/9c4eb1812751c51180ab8711dac2fb0b753ff2be..97b5d40a08336ab1cdcaf2cc6628baacd615f9f9

---

From: Mike Bishop <[email-masked]>
Date: Wed, 26 Jul 2017 18:14:13 +0000 (UTC)

Merged #692.

-- 
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/692#event-1180409102