When the connection starts, image the following scenario:
The client sends the preface and the server sends a SETTINGS frame. It sets 1
to 16384
and 3
to 1000
(those numbers have no special meaning, just for illustration), then the clients sends it's SETTINGS frame with the setting 1
=8192
and 2
=1
.
Now, are there two seperate mappings for the settings? So a local and remote one?
Like local=[1
=16384
, 3
=1000
] and remote=[1
=8192
, 2
=1
]
or do they share one map for the settings?
Like settings=[1
=8192
, 2
=1
, 3
=1000
]
RFC 7540, section 6.5 states that:
SETTINGS parameters are not negotiated; they describe characteristics of the sending peer, which are used by the receiving peer. Different values for the same parameter can be advertised by each peer.
Your particular example mentions settings key 1, which corresponds to SETTINGS_HEADER_TABLE_SIZE, which has a particular handling that is specified also in RFC 7541.
In general, local and remote peers maintain separate mappings for the settings, and some are only meaningful (or have slightly different semantic) for one peer only.
For example, a server may inform a client that it won't accept more than 1024 concurrent streams (key 3, SETTINGS_MAX_CONCURRENT_STREAMS), but it's unlikely that a client would inform a server of this value in typical deployments