Skip to content

Commit

Permalink
Martin's feedback
Browse files Browse the repository at this point in the history
  • Loading branch information
MikeBishop committed May 9, 2018
1 parent 7b81097 commit c2b3fe8
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 14 deletions.
3 changes: 2 additions & 1 deletion draft-ietf-quic-http.md
Expand Up @@ -785,7 +785,7 @@ The following settings are defined in HTTP/QUIC:
: An integer with a maximum value of 2^30 - 1. The default value is
unlimited.

SETTINGS_BLOCKING_HEADER_REFERENCES (0x7):
SETTINGS_QPACK_BLOCKED_STREAMS (0x7):
: An integer with a maximum value of 2^16 - 1. The default value is 100.

#### Initial SETTINGS Values
Expand Down Expand Up @@ -1454,6 +1454,7 @@ The entries in the following table are registered by this document.
| Reserved | 0x4 | N/A |
| Reserved | 0x5 | N/A |
| MAX_HEADER_LIST_SIZE | 0x6 | {{settings-parameters}} |
| QPACK_BLOCKED_STREAMS | 0x7 | {{settings-parameters}} |
|----------------------------|------|-------------------------|

## Error Codes {#iana-error-codes}
Expand Down
27 changes: 14 additions & 13 deletions draft-ietf-quic-qpack.md
Expand Up @@ -95,25 +95,26 @@ reintroduced by HPACK when the loss includes a HEADERS frame.

## Avoiding Head-of-Line Blocking in HTTP/QUIC {#overview-hol-avoidance}

In the example above, the header block on the second stream contained a
reference to data which might not yet have been processed by the recipient. Such
references are called "vulnerable," because the loss of a different packet can
keep the reference from being usable. If the reference cannot be immediately
processed on receipt, the stream is considered "blocked."
Because QUIC does not guarantee order between data on different streams, a
reference might be received on a request stream to an entry which is not yet in
the dynamic table. References are called "vulnerable" when they refer to entries
whose receipt has not been confirmed by the peer, because loss or reordering can
keep the reference from being immediately usable. If the reference cannot be
immediately processed on receipt, the stream is considered "blocked."

The decoder can signal that it is willing to process vulnerable references by
setting SETTINGS_BLOCKING_HEADER_REFERENCES to a non-zero value. In this case,
the encoder can choose on a per-header-block basis whether to favor higher
setting SETTINGS_QPACK_BLOCKED_STREAMS to a non-zero value. In this case, the
encoder can choose on a per-header-block basis whether to favor higher
compression ratio (by permitting vulnerable references) or HoL resilience (by
avoiding them).

An encoder MUST NOT have header blocks which contain vulnerable references
outstanding on more streams than the value of
SETTINGS_BLOCKING_HEADER_REFERENCES at any time. Note that the decoder's count
of streams which are actually blocked will be less than or equal to the
encoder's count of references which are vulnerable (potentially blocking). If
the decoder encounters more blocked streams than it promised to support, it
SHOULD treat this as a stream error of type HTTP_QPACK_DECOMPRESSION_FAILED.
outstanding on more streams than the value of SETTINGS_QPACK_BLOCKED_STREAMS at
any time. Note that the decoder's count of streams which are actually blocked
will be less than or equal to the encoder's count of references which are
vulnerable (potentially blocking). If the decoder encounters more blocked
streams than it promised to support, it SHOULD treat this as a stream error of
type HTTP_QPACK_DECOMPRESSION_FAILED.

The header block contains a Base Index (see {{absolute-index}}) which is used to
correctly index entries, regardless of reordering in the transport (see
Expand Down

0 comments on commit c2b3fe8

Please sign in to comment.