On 13 May 2007, at 16:05, Ion Alexandru Morega wrote:
Hi.
I'm having trouble using mod_cache/mod_disk_cache and mod_deflate
at the same time.
My setup is like this: one Tomcat 5.5 webapp, Apache 2.2.3 + mod_jk
1.2.18. The intent is to cache pages generated by the webapp; as
long as the page content is not changed, pages should be served
from Apache's cache (communication between apache and the webapp is
done through Last-Modified and If-Modified-Since HTTP headers). It
works well if I don't use mod_deflate; as soon as I enable
mod_deflate compression, Apache seems to ignore its cache.
here is a configuration snippet:
---
AddOutputFilterByType DEFLATE text/html text/plain text/xml
application/x-javascript text/css
CacheRoot /var/test_app/cache
CacheDirLevels 1
CacheDirLength 1
CacheEnable disk /cache_test
CacheIgnoreHeaders Set-Cookie Cookie Cache-Control Pragma
CacheIgnoreCacheControl On
CacheMaxExpire 0
---
CacheDirLevels and CacheDirLength are set to 1 to make it easier to
look into the cache directory. I set CacheMaxExpire to zero because
I don't want any "blind" caching of documents; each and every
request must ask the Tomcat webapp whether the cached data is
fresh. I'm deliberately ignoring any user agent's cache control
headers because I trust my own caching mechanism to provide fresh
data (I tried working with many permutations of CacheIngoreHeaders
and CacheIgnoreCacheControl, including commenting out both, none
worked properly with mod_deflate).
Comparing the behaviour with / without mod_deflate, I've seen some
interesting things.
Firstly, without mod_deflate, the first request for the page causes
the Tomcat webapp to generate the page, which is then stored in the
cache. Any subsequent request will reach Tomcat with a "If-Modified-
Since" header, containing the date that Tomcat previously sent as
"Last-Modified" (and if Tomcat replies with a 304 Not Modified
status, the page is served from cache). I haven't been able to get
any user-agent to trick Apache into sending a request without "If-
Modified-Since". Looking into the on-disk cache, I see two files
generated for this page - one [hashcode].header and one
[hashcode].data file. This all is, as I understand, correct behaviour.
Now, with mod_deflate enabled, if the browser's request contains no
"If-Modified-Since" header, Apache will not send "If-Modified-
Since" either. The page is therefore generated all over again, even
if it was already in the cache. Looking into the cache folder, i
now see an extra [hashcode].header.vary directory, that contains
different cached responses for different user-agents.
Interestingly, if the user-agent request contains an "If-Modified-
Since" header, it's passed on to Tomcat, and the page is not
generated again (because it's cached by the browser).
I have tried this configuration with apache 2.2.4 and mod_jk
1.2.22, and the problem is the same.
I'm now experimenting with mod_mem_cache, which seems to work well,
but it sometimes forgets to send "If-Modified-Since" headers too.
Still, I'd rather use mod_disk_cache if I could.
I hope this information is detailed enough; if not, I'll gladly
explain more.
Thanks,
-- Alex
Hi. Just wanted to bring up this issue again. I've ended up writing a
custom cache in Java, but I'd much rather use Apache's mod_disk_cache.
Thanks,
-- Alex
---------------------------------------------------------------------
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]