Skip to content

Commit

Permalink
Merge branch 'master' into async-cert-validation
Browse files Browse the repository at this point in the history
  • Loading branch information
martinthomson committed Sep 2, 2020
2 parents 98905a1 + 71a1ff2 commit 6d6a93f
Show file tree
Hide file tree
Showing 5 changed files with 903 additions and 671 deletions.
47 changes: 30 additions & 17 deletions draft-ietf-quic-http.md
Original file line number Diff line number Diff line change
Expand Up @@ -824,8 +824,9 @@ MAX_PUSH_ID frame; see {{frame-max-push-id}}. In particular, a server is not
able to push until after the client sends a MAX_PUSH_ID frame. A client sends
MAX_PUSH_ID frames to control the number of pushes that a server can promise. A
server SHOULD use Push IDs sequentially, beginning from zero. A client MUST
treat receipt of a push stream with a Push ID that is greater than the maximum
Push ID as a connection error of type H3_ID_ERROR.
treat receipt of a push stream as a connection error of type H3_ID_ERROR when no
MAX_PUSH_ID frame has been sent or when the stream references a Push ID that is
greater than the maximum Push ID.

The Push ID is used in one or more PUSH_PROMISE frames ({{frame-push-promise}})
that carry the header section of the request message. These frames are sent on
Expand Down Expand Up @@ -1414,6 +1415,11 @@ settings to have any meaning upon receipt.
Because the setting has no defined meaning, the value of the setting can be any
value the implementation selects.

Setting identifiers which were used in HTTP/2 where there is no corresponding
HTTP/3 setting have also been reserved ({{iana-settings}}). These settings MUST
NOT be sent, and their receipt MUST be treated as a connection error of type
H3_SETTINGS_ERROR.

Additional settings can be defined by extensions to HTTP/3; see {{extensions}}
for more details.

Expand Down Expand Up @@ -1491,7 +1497,7 @@ The payload consists of:

Push ID:
: A variable-length integer that identifies the server push operation. A Push
ID is used in push stream headers ({{server-push}}), CANCEL_PUSH frames
ID is used in push stream headers ({{server-push}}) and CANCEL_PUSH frames
({{frame-cancel-push}}).

Encoded Field Section:
Expand Down Expand Up @@ -1582,12 +1588,12 @@ sending MAX_PUSH_ID frames as the server fulfills or cancels server pushes.

~~~~~~~~~~ drawing
MAX_PUSH_ID Frame {
Type (i) = 0x1,
Type (i) = 0xD,
Length (i),
Push ID (i),
}
~~~~~~~~~~
{: #fig-max-push title="MAX_PUSH_ID Frame Payload"}
{: #fig-max-push title="MAX_PUSH_ID Frame"}

The MAX_PUSH_ID frame carries a single variable-length integer that identifies
the maximum value for a Push ID that the server can use; see {{server-push}}. A
Expand All @@ -1609,7 +1615,8 @@ implementation chooses.

Frame types that were used in HTTP/2 where there is no corresponding HTTP/3
frame have also been reserved ({{iana-frames}}). These frame types MUST NOT be
sent, and receipt MAY be treated as an error of type H3_FRAME_UNEXPECTED.
sent, and their receipt MUST be treated as a connection error of type
H3_FRAME_UNEXPECTED.


# Error Handling {#errors}
Expand Down Expand Up @@ -2331,8 +2338,10 @@ frame of the control stream, and thereafter cannot change. This eliminates many
corner cases around synchronization of changes.

Some transport-level options that HTTP/2 specifies via the SETTINGS frame are
superseded by QUIC transport parameters in HTTP/3. The HTTP-level options that
are retained in HTTP/3 have the same value as in HTTP/2.
superseded by QUIC transport parameters in HTTP/3. The HTTP-level options that
are retained in HTTP/3 have the same value as in HTTP/2. The superseded
settings are reserved, and their receipt is an error. See
{{settings-parameters}} for discussion of both the retained and reserved values.

Below is a listing of how each HTTP/2 SETTINGS parameter is mapped:

Expand All @@ -2341,25 +2350,29 @@ SETTINGS_HEADER_TABLE_SIZE:

SETTINGS_ENABLE_PUSH:
: This is removed in favor of the MAX_PUSH_ID frame, which provides a more
granular control over server push.
granular control over server push. Specifying a setting with the identifier
0x2 (corresponding to the SETTINGS_ENABLE_PUSH parameter) in the HTTP/3
SETTINGS frame is an error.

SETTINGS_MAX_CONCURRENT_STREAMS:
: QUIC controls the largest open Stream ID as part of its flow control logic.
Specifying the SETTINGS_MAX_CONCURRENT_STREAMS parameter in the SETTINGS frame
is an error.
Specifying a setting with the identifier 0x3 (corresponding to the
SETTINGS_MAX_CONCURRENT_STREAMS parameter) in the HTTP/3 SETTINGS frame is an
error.

SETTINGS_INITIAL_WINDOW_SIZE:
: QUIC requires both stream and connection flow control window sizes to be
specified in the initial transport handshake. Specifying the
SETTINGS_INITIAL_WINDOW_SIZE parameter in the SETTINGS frame is an error.
specified in the initial transport handshake. Specifying a setting with the
identifier 0x4 (corresponding to the SETTINGS_INITIAL_WINDOW_SIZE parameter)
in the HTTP/3 SETTINGS frame is an error.

SETTINGS_MAX_FRAME_SIZE:
: This setting has no equivalent in HTTP/3. Specifying it in the SETTINGS frame
is an error.
: This setting has no equivalent in HTTP/3. Specifying a setting with the
identifier 0x5 (corresponding to the SETTINGS_MAX_FRAME_SIZE parameter) in the
HTTP/3 SETTINGS frame is an error.

SETTINGS_MAX_HEADER_LIST_SIZE:
: This setting identifier has been renamed SETTINGS_MAX_FIELD_SECTION_SIZE. See
{{settings-parameters}}.
: This setting identifier has been renamed SETTINGS_MAX_FIELD_SECTION_SIZE.

In HTTP/3, setting values are variable-length integers (6, 14, 30, or 62 bits
long) rather than fixed-length 32-bit fields as in HTTP/2. This will often
Expand Down
Loading

0 comments on commit 6d6a93f

Please sign in to comment.