> On 29 Jul 2016, at 09:31, Wesley Oliver <wesley.olis@gmail.com> wrote:
>
> I see that the documentation say nothing about how the negotiation is to happen.
In this case, a setting is necessary: a header field is not good enough. This is because this functionality requires that all entities on the connection (intermediaries too) understand the change this makes to the H2 stream state machine. That works when transmitted on a SETTINGS frame because each hop of the connection that is actually participating in the H2 connection needs to look at the SETTINGS frame and respond appropriately. Header fields, however, may be passed through to the endpoint, which leads to a situation where the client and server can both do this but the intermediary cannot, and the intermediary mangles or otherwise terminates the connection.
> Otherwise it would have to wait for the settings frame communication to have proceed first,
> which then introduce latency for client side and would result in the server having to block
> before it could response, clearly a degradation of performance.
The server needs to do this anyway. The start of a HTTP/2 connection involves both parties sending SETTINGS frames. The server cannot receive the first HEADERS frame without having previously received a SETTINGS from the client that would be offering support for this functionality.
Cory