Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Clarify HTTP/2 setting parameter reservation #3955

Merged
merged 5 commits into from Sep 1, 2020
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
33 changes: 22 additions & 11 deletions draft-ietf-quic-http.md
Expand Up @@ -1414,6 +1414,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 @@ -2331,8 +2336,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 +2348,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