[PATCH] HTTP/2: copy additional headers in the pushed requests

Alessandro Ghedini alessandro at ghedini.me
Thu Feb 8 20:04:57 UTC 2018


On Thu, Feb 08, 2018 at 10:18:54PM +0300, Maxim Dounin wrote:
> Hello!
> 
> On Thu, Feb 08, 2018 at 05:07:49PM +0000, Alessandro Ghedini wrote:
> 
> > On Thu, Feb 08, 2018 at 05:04:58PM +0000, Alessandro Ghedini wrote:
> > > # HG changeset patch
> > > # User Alessandro Ghedini <alessandro at cloudflare.com>
> > > # Date 1518109032 0
> > > #      Thu Feb 08 16:57:12 2018 +0000
> > > # Branch push-copy-headers
> > > # Node ID 4f7f42e6d13add2ab0c7a9654472bb74085181d1
> > > # Parent  a49af443656f2b65ca5de9d8cad5594f44e18ff7
> > > HTTP/2: copy additional headers in the pushed requests.
> > > 
> > > To ensure pushed requests are processed consistently with the original
> > > client request, some headers need to be copied from the original request
> > > into the pushed one.
> > > 
> > > The headers currently copied are User-Agent, Accept, Accept-Language and
> > > Accept-Encoding.
> > 
> > So, I'm not quite sure if this is the correct way to go about doing this, but
> > I think the issue is real and worth fixing, so I'd be happy to implement this
> > differently if you have alternative ideas.
> 
> Could you please elaborate more on "the issue is real"?

Right, sorry. Essentially the problem is that origins may generate a different
responses dependning on these headers, and a pushed request may be processed
inconsistently from the original request if these headers are different (say,
stupid example, if the client requests a specific language, the main request
may get a response in one language, and the pushed one in another).

Additionally things like compression wouldn't work for pushed requests, which
is not optimal.

There are of course other headers that could influence the origin's response,
but this somewhat minimal list of standard headers seemed like a good start.

FWIW, other server push implementations like Apache's mod_http2, h2o (used
in production by Fastly) and Cloudflare's closed-source implementation, all
behave like this, and have done so for years, without any apparent issue.

Cheers


More information about the nginx-devel mailing list