From 7743d02e38d5f3b3654d7e328a09fbc06dd4cf51 Mon Sep 17 00:00:00 2001 From: Mike Bishop Date: Wed, 14 Nov 2018 11:22:12 -0800 Subject: [PATCH 1/5] FIN is irrelevant --- draft-ietf-quic-http.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/draft-ietf-quic-http.md b/draft-ietf-quic-http.md index 7510909dd8..bf83c25554 100644 --- a/draft-ietf-quic-http.md +++ b/draft-ietf-quic-http.md @@ -860,9 +860,9 @@ details. 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 following the -body. Senders MUST send only one header block in the trailers section; -receivers MUST discard any subsequent header blocks. +Trailing header fields are carried in an additional HEADERS frame following the +body. Senders MUST send only one HEADERS frame in the trailers section; +receivers MUST discard any subsequent HEADERS frames. A response MAY consist of multiple messages when and only when one or more informational responses (1xx, see {{!RFC7231}}, Section 6.2) precede a final @@ -870,10 +870,17 @@ response to the same request. Non-final responses do not contain a payload body or trailers. An HTTP request/response exchange fully consumes a bidirectional QUIC stream. -After sending a request, a client closes the stream for sending; after sending a -final response, the server closes the stream for sending and the QUIC stream is -fully closed. Requests and responses are considered complete when the -corresponding QUIC stream is closed in the appropriate direction. +After sending a request, a client SHOULD close the stream for sending; after +sending a final response, the server SHOULD close the stream for sending. At +this point, the QUIC stream is fully closed. + +Changes to the state of a request stream do not directly affect message +processing. Endpoints MUST process complete HTTP messages without relying on +stream closure as an end-of-message signal. For example, servers do not abort a +response in progress solely due to a state change on the request stream. +However, if a client stream terminates without containing a usable HTTP message, +the server SHOULD abort its response with the error code +HTTP_INCOMPLETE_REQUEST. A server can send a complete response prior to the client sending an entire request if the response does not depend on any portion of the request that has @@ -884,13 +891,6 @@ response, and cleanly closing its stream. Clients MUST NOT discard complete responses as a result of having their request terminated abruptly, though clients can always discard responses at their discretion for other reasons. -Changes to the state of a request stream, including receiving a QUIC -RESET_STREAM with any error code, do not affect the state of the server's -response. Servers do not abort a response in progress solely due to a state -change on the request stream. However, if the request stream terminates without -containing a usable HTTP request, the server SHOULD abort its response with the -error code HTTP_INCOMPLETE_REQUEST. - ### Header Formatting and Compression From df5d86a72301cbdb5d24024cf9706424913a05f8 Mon Sep 17 00:00:00 2001 From: Mike Bishop Date: Mon, 19 Nov 2018 11:22:56 -0800 Subject: [PATCH 2/5] Close is end, consume partials --- draft-ietf-quic-http.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/draft-ietf-quic-http.md b/draft-ietf-quic-http.md index bf83c25554..b5b7bb7c50 100644 --- a/draft-ietf-quic-http.md +++ b/draft-ietf-quic-http.md @@ -874,13 +874,12 @@ After sending a request, a client SHOULD close the stream for sending; after sending a final response, the server SHOULD close the stream for sending. At this point, the QUIC stream is fully closed. -Changes to the state of a request stream do not directly affect message -processing. Endpoints MUST process complete HTTP messages without relying on -stream closure as an end-of-message signal. For example, servers do not abort a -response in progress solely due to a state change on the request stream. -However, if a client stream terminates without containing a usable HTTP message, -the server SHOULD abort its response with the error code -HTTP_INCOMPLETE_REQUEST. +When a stream is closed, this indicates the end of an HTTP message. +Because some messages are large or unbounded, endpoints SHOULD begin processing +partial HTTP messages once enough of the message has been received to make +progress. If a client stream terminates without enough of the HTTP message to +provide a complete response, the server SHOULD abort its response with the error +code HTTP_INCOMPLETE_REQUEST. A server can send a complete response prior to the client sending an entire request if the response does not depend on any portion of the request that has From eb58201482ac4ed045591927e81ae6dcf131aecc Mon Sep 17 00:00:00 2001 From: Martin Thomson Date: Tue, 20 Nov 2018 10:32:12 -0800 Subject: [PATCH 3/5] Apply suggestions from code review Co-Authored-By: MikeBishop --- draft-ietf-quic-http.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/draft-ietf-quic-http.md b/draft-ietf-quic-http.md index b5b7bb7c50..3256bf810d 100644 --- a/draft-ietf-quic-http.md +++ b/draft-ietf-quic-http.md @@ -870,8 +870,8 @@ response to the same request. Non-final responses do not contain a payload body or trailers. An HTTP request/response exchange fully consumes a bidirectional QUIC stream. -After sending a request, a client SHOULD close the stream for sending; after -sending a final response, the server SHOULD close the stream for sending. At +After sending a request, a client MUST close the stream for sending; after +sending a final response, the server MUST close the stream for sending. At this point, the QUIC stream is fully closed. When a stream is closed, this indicates the end of an HTTP message. From dda6b41538737d1bee15893e3f0c7d74f2cc014d Mon Sep 17 00:00:00 2001 From: Mike Bishop Date: Tue, 27 Nov 2018 16:05:17 -0800 Subject: [PATCH 4/5] Add a MUST, call out CONNECT --- draft-ietf-quic-http.md | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/draft-ietf-quic-http.md b/draft-ietf-quic-http.md index 3256bf810d..055de105cf 100644 --- a/draft-ietf-quic-http.md +++ b/draft-ietf-quic-http.md @@ -870,16 +870,18 @@ response to the same request. Non-final responses do not contain a payload body or trailers. An HTTP request/response exchange fully consumes a bidirectional QUIC stream. -After sending a request, a client MUST close the stream for sending; after -sending a final response, the server MUST close the stream for sending. At -this point, the QUIC stream is fully closed. - -When a stream is closed, this indicates the end of an HTTP message. -Because some messages are large or unbounded, endpoints SHOULD begin processing -partial HTTP messages once enough of the message has been received to make -progress. If a client stream terminates without enough of the HTTP message to -provide a complete response, the server SHOULD abort its response with the error -code HTTP_INCOMPLETE_REQUEST. +After sending a request, a client MUST close the stream for sending; clients +MUST NOT make stream closure dependent on receiving a response to their request, +unless using the CONNECT method (see {{the-connect-method}}). After sending a +final response, the server MUST close the stream for sending. At this point, the +QUIC stream is fully closed. + +When a stream is closed, this indicates the end of an HTTP message. Because some +messages are large or unbounded, endpoints SHOULD begin processing partial HTTP +messages once enough of the message has been received to make progress. If a +client stream terminates without enough of the HTTP message to provide a +complete response, the server SHOULD abort its response with the error code +HTTP_INCOMPLETE_REQUEST. A server can send a complete response prior to the client sending an entire request if the response does not depend on any portion of the request that has From a67f74d5121f01445b2de13761462cc3a4f45bf3 Mon Sep 17 00:00:00 2001 From: Mike Bishop Date: Wed, 28 Nov 2018 10:27:36 -0800 Subject: [PATCH 5/5] Which unless? --- draft-ietf-quic-http.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/draft-ietf-quic-http.md b/draft-ietf-quic-http.md index 055de105cf..2b95a0e507 100644 --- a/draft-ietf-quic-http.md +++ b/draft-ietf-quic-http.md @@ -870,11 +870,11 @@ response to the same request. Non-final responses do not contain a payload body or trailers. An HTTP request/response exchange fully consumes a bidirectional QUIC stream. -After sending a request, a client MUST close the stream for sending; clients -MUST NOT make stream closure dependent on receiving a response to their request, -unless using the CONNECT method (see {{the-connect-method}}). After sending a -final response, the server MUST close the stream for sending. At this point, the -QUIC stream is fully closed. +After sending a request, a client MUST close the stream for sending. Unless +using the CONNECT method (see {{the-connect-method}}), clients MUST NOT make +stream closure dependent on receiving a response to their request. After sending +a final response, the server MUST close the stream for sending. At this point, +the QUIC stream is fully closed. When a stream is closed, this indicates the end of an HTTP message. Because some messages are large or unbounded, endpoints SHOULD begin processing partial HTTP