Hi, I'm faced with a long-standing problem that has recently become a
whole lot worse for me: It's the case of the "Vary" header preventing
caching in Internet Explorer, which causes no end of problems when it
is triggered via mod_negotiation.

I use mod_negotiation extensively, not to actually negotiate content
in the sense of serving different content to different clients, but
rather to provide extension-less URLs. Not only does it make URLs look
nicer, it also allows me to change filetypes (e.g. from .gif to .png,
or from script.js.cgi to script.js.php) without breaking thousands of
inbound links or maintaining a large redirection map.

The trouble is this: mod_negotiation always adds a "Vary" header, but
the "Vary" header breaks a ton of stuff in Internet Explorer. The
biggest problems are (1) extension-less images are not cached, (2)
dynamically generated CSS or Javascript files (e.g. style.css.php or
functions.js.php) are not cached, and (3) some types of dynamically
generated files -- e.g. favicon.ico.php or playlist.m3u.php -- are
just totally broken in IE (won't display or pass properly to external
programs).

These issues are causing huge problems for my site, with IE pulling
about 20x more data on each request than it should. It wasn't a big
deal when I had a small site with low traffic, but it's spiraling out
of control now... I've struggled for countless hours to find solutions
to these problems, and I could only come up with two answers on the
web, both of which have serious drawbacks:

1. Add "Header unset Vary" to httpd.conf. The problem with this is
that it just doesn't work. I don't know why, but I've stuck it in
about 100 different places and it doesn't make any difference. That
"Vary" header never goes away.

2. Add "SetEnv force-no-vary" to httpd.conf. The problem with this is
that it also degrades the connection to HTTP/1.0, which presumably has
the side effect of killing HTTP pipelining. On a heavily trafficked
site with a lot of small files requested on each page view, this is
not a good trade-off.

So... The question here is this: Since I'm not using mod_negotiation
for any purpose except to hide extensions, can I safely do one of the
following:

1. Modify src/main/http_protocol.c so that "force-no-vary" does not
also trigger "force-no-response".

OR

2. Modify src/modules/standard/mod_negotiation.c by commenting out the
entire section that sets the Vary and TCN headers in the first place.

I'll probably go with option 2 since it seems like the surefire way to
wipe out that "Vary" header with no HTTP/1.1 degradation, but I'd like
some input from the Apache gurus about potential pitfalls before I go
through with either of these solutions in production.

Thanks.

---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: [EMAIL PROTECTED]
  "   from the digest: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to