PUSH_PROMISE and load balancers

So I have been thinking about the case where you have a HTTP2 aware load 
balancer that serves both HTTP1 and HTTP2 clients, and uses HTTP2 to 
connect to the backend servers.

Such load balancers will generally maintain a connection pool to the 
backend servers, and to allow PUSH_PROMISE to be used will need to 
enable push on the connection.

I am thinking about then case when a HTTP1 client connects to this 
proxy, the backend servers will attempt to use PUSH_PROMISE to push 
content to the server, even though the load balancer knows in advance 
that it cannot accept the content.

It would be possible to hack around this to some extent (e.g. using a 
custom header to signify that push should be disabled for this request), 
however I was thinking that a much nicer solution would be to add a flag 
to the HEADERS frame indicating that push should be disabled for this 
request only (i.e. no PUSH_PROMISE frame should be sent with this 
request as the associated stream id).

Note that you can't really just send a SETTINGS frame before each 
request to alter the SETTINGS_ENABLE_PUSH flag. This will work for the 
simple case if you are allocating one connection per request, however it 
won't work if the proxy is multiplexing requests from different clients 
over the same HTTP2 connection.

Thoughts?

Stuart

Received on Friday, 26 September 2014 00:34:05 UTC