Skip to content

Commit

Permalink
Remove replay requirement; add YOU_SCREWED_UP error code
Browse files Browse the repository at this point in the history
  • Loading branch information
MikeBishop committed Mar 6, 2017
1 parent c6b106d commit bff28ed
Showing 1 changed file with 11 additions and 8 deletions.
19 changes: 11 additions & 8 deletions draft-ietf-quic-http.md
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,10 @@ application.

QUIC reserves Stream 1 for crypto operations (the handshake, crypto config
updates). Stream 3 is reserved for sending and receiving HTTP control frames,
and is analogous to HTTP/2's Stream 0.
and is analogous to HTTP/2's Stream 0. This connection control stream is
considered critical to the HTTP connection. If the connection control stream is
closed for any reason, this MUST be treated as a connection error of type
QUIC_CLOSED_CRITICAL_STREAM.

When HTTP headers and data are sent over QUIC, the QUIC layer handles most of
the stream management. An HTTP request/response consumes a pair of streams: This
Expand All @@ -204,17 +207,14 @@ transferring data.
Because the message control stream contains HPACK data which manipulates
connection-level state, the message control stream MUST NOT be closed with a
stream-level error. If an implementation chooses to reject a request with a
QUIC error code, it MUST trigger a RST_STREAM on the data stream only. An
QUIC error code, it MUST trigger a QUIC RST_STREAM on the data stream only. An
implementation MAY close (FIN) a message control stream without completing a
full HTTP message if the data stream has been abruptly closed. Data on message
control streams MUST be fully consumed, or the connection terminated.

If a message control stream is terminated abruptly by the transport layer (e.g.
with QUIC_TOO_MANY_OPEN_STREAMS), any frames already sent on that stream MUST
be re-played on another message control stream as soon as the maximum number of
streams permits. If the implementation no longer requires the response to this
request, it MAY abruptly terminate the corresponding data stream at the same
time.
All message control streams are considered critical to the HTTP connection. If
a message control stream is terminated abruptly for any reason, this MUST be
treated as a connection error of type HTTP_RST_CONTROL_STREAM.

This comment has been minimized.

Copy link
@martinthomson

martinthomson Mar 6, 2017

Member

HTTP_CLOSED_CONTROL_STREAM or QUIC_CLOSED_CRITICAL_STREAM ?

This comment has been minimized.

Copy link
@MikeBishop

MikeBishop Mar 7, 2017

Author Contributor

Neither, since non-abrupt closure is fine. Of course, if we rename RST, we'll need to rename this as well.


Pairs of streams must be utilized sequentially, with no gaps. The data stream
MUST be reserved with the QUIC implementation when the message control stream
Expand Down Expand Up @@ -796,6 +796,9 @@ HTTP_SETTINGS_ON_WRONG_STREAM (0x0F):
HTTP_MULTIPLE_SETTINGS (0x10):
: More than one SETTINGS frame was received.

HTTP_RST_CONTROL_STREAM (0x11):
: A message control stream closed abruptly.

## Mapping HTTP/2 Error Codes

The HTTP/2 error codes defined in Section 7 of {{!RFC7540}} map to QUIC error
Expand Down

0 comments on commit bff28ed

Please sign in to comment.