On Wed, Apr 10, 2019 at 12:10 PM Stefan Eissing
<stefan.eiss...@greenbytes.de> wrote:
>
> > Am 09.04.2019 um 18:48 schrieb Roy T. Fielding <field...@gbiv.com>:
> >>
> >> 2. Validation responses lose the "Vary" header from the unconditional 
> >> response. This happens on resources where mod_deflate is active.
> >>  The 200 response without any "if-modified-since" etc. carries "Vary: 
> >> Accept-Encoding" as it should.
> >>  The 304 response with "if-modified-since" has no "Vary" header.
> >>  The code in mod_deflate looks as if it tries to add it in any case, where 
> >> is it lost?
> >
> > That's one of many bugs related to design problems with mod_deflate.  
> > Basically,
> > it chooses to insert itself into the response handling after the other 
> > checks are done,
> > which means a 304 doesn't even know yet whether the response would use gzip.
> > The solution (which I never found time to implement) is to replace dynamic 
> > gzip with
> > a transfer encoding generator,

Do user-agents support "Transfer-Encoding: gzip, chunked" currently?
That'd be the best/easier solution I think.

> > and/or to rewrite the mod_deflate CE encoder to act more
> > like mod_cache.
>
> Thinking out loud here:
>
> Acting more like mod_cache would then split the deflate output filter into a 
> resource and a protocol type one, I assume?
>
> The protocol one would
> a. check if its resource counterpart was active
> b. or, if the requests status is 304, if it would have been active
> add "Vary: Accept-Encoding" if one of those is true
>
> For b. a bit of heuristic seems necessary:
> - detect that the resource filter has been added before *)
> - assume it applies when content-length is not set
> - check content-length otherwise
> - perform the other (r->subprocess_env etc.) checks as in resource filter
>
>
> *) It could detect the resource filter in r->output_filters, however 
> ap_send_error_respons() overwrites this with r->proto_output_filters. Seems 
> like a good idea to save them for later inspection?

I didn't think of it yet but it looks more complicated.
Still the etag would have to differ for the same gziped or not
resource, but not with the TE solution right?

Regards,
Yann.

Reply via email to