Subject: SETTINGS frame payload commit behavior

From: Osama Mazahir <[email-masked]>
Date: Sat, 17 Jan 2015 02:03:19 +0000

Section 6.5 SETTINGS
   Each parameter in a SETTINGS frame replaces any existing value for
   that parameter.  Parameters are processed in the order in which they
   appear, and a receiver of a SETTINGS frame does not need to maintain
   any state other than the current value of its parameters.  Therefore,
   the value of a SETTINGS parameter is the last value that is seen by a
   receiver.

Let's say a SETTINGS frame has two values for SETTINGS_HEADER_TABLE_SIZE (i.e. specified twice).  The first value (e.g. at index=0) is 1KB and the second value (e.g. at index=1) is 60KB.

Does the receiver apply the table size change just once with a value of 60KB.  Or does he first shrink the table size to 1KB and then expand the table to 60KB?

---

From: Tatsuhiro Tsujikawa <[email-masked]>
Date: Sat, 17 Jan 2015 11:58:52 +0900

On Sat, Jan 17, 2015 at 11:03 AM, Osama Mazahir <[email-masked]>
wrote:

> Let’s say a SETTINGS frame has two values for SETTINGS_HEADER_TABLE_SIZE
> (i.e. specified twice).  The first value (e.g. at index=0) is 1KB and the
> second value (e.g. at index=1) is 60KB.
>
>
>
> Does the receiver apply the table size change just once with a value of
> 60KB.  Or does he first shrink the table size to 1KB and then expand the
> table to 60KB?
>

​The latter is correct.  All SETTINGS must be processed in the order.
There may be some SETTINGS values you can skip to process. For example, you
might see 3 SETTINGS_HEADER_TABLE_SIZE entries in this order: 0, 16KB,
32KB, then 16KB can be safely ignored.

The behavior of multiple SETTINGS_HEADER_TABLE_SIZE is ​explained in detail
in http://http2.github.io/http2-spec/compression.html#maximum.table.size

Best regards,
Tatsuhiro Tsujikawa