How to adjust HPACK dynamic table?
mdounin at mdounin.ru
Thu Dec 17 18:02:09 UTC 2020
On Thu, Dec 17, 2020 at 05:01:54AM +0000, Jon Carmicheal wrote:
> I would like to disable the caching of headers in the dynamic
> table of the HTTP/2 HPACK compression algorithm described in RFC
> 7541. I have defined my nginx server with
> listen 8080
> and I've confirmed that the HPACK algorithm is working as
> expected with Huffman encoding, static header table indexing,
> and dynamic header table indexing. But I haven't been able to
> disable the dynamic table.
You cannot disable dynamic table support in nginx. As an HPACK
decoder, nginx supports dynamic table of up to 4096 octets (the
default for SETTINGS_HEADER_TABLE_SIZE in HTTP/2).
> RFC 7541 mentions in "Section 4.2. Maximum Table Size" the
> ability of an HTTP/2 node to "clear entries from the dynamic
> table by setting a maximum size of 0, which can subsequently be
> restored." Is that a feature supported by nginx? Can I disable
> the dynamic table entirely so that no header fields are cached?
> And can I arbitrarily send a flush request so that all entries
> are evicted and then the dynamic table size is restored? If so,
Yes, it is supported. The "how" is specified in the section "6.3.
Dynamic Table Size Update" of the same RFC
> I've been trying to play with "http2_max_field_size" and
> "http2_max_header_size" in the server configuration file as
> described in
> https://nginx.org/en/docs/http/ngx_http_v2_module.html. But I
> don't think those are the right parameters. When I set either of
> them to zero, it makes the server return an error when a header
> is sent.
These are unrelated parameters. They set size limits on
compressed individual header fields and total length of all
uncompressed headers, respectively, so nginx will reject attempts
to use larger headers.
More information about the nginx