apache上的mod_deflate导致浏览器执行200而不是304?

时间:2009-05-29 05:02:15

标签: apache caching mod-deflate http-status-code-304

我在Ubuntu机器上的Apache 2上启用了mod_deflate,并注意到我的浏览器没有在页面刷新时缓存压缩文件类型。我使用了firebug的网络设置来检查并在另一台计算机上进行了验证。

如果我压缩css和js文件,则在mod_deflate下,浏览器每次都会发出请求。

如果我关闭mod_deflate,浏览器会获得一个304的css和js文件。实际效果是,如果我没有启用mod_deflate,页面在刷新时加载速度会更快。

我打开的其他模块之一是否会造成这种情况?我没有正确设置Apache中的某种缓存设置吗?

我的mods启用目录: alias.conf
authz_default.load
autoindex.conf
deflate.load
mime.conf
php5.conf
setenvif.load
alias.load
authz_groupfile.load
autoindex.load
dir.conf
mime.load
php5.load
ssl.conf中
auth_digest.load
authz_host.load
cgi.load
dir.load
negotiation.conf
rewrite.load
ssl.load
authn_file.load
authz_user.load
deflate.conf
env.load
negotiation.load
setenvif.conf

2 个答案:

答案 0 :(得分:0)

我以为我之前已经回答了这个问题但是没有发布。对不起,如果它最终成为双重帖子。

事实证明,导致问题的是etags。我不确定为什么,但是当我们关闭etags时,浏览器开始正确缓存。在Google上搜索FileETags。

现在,我不确定为什么关闭etags会这样做...如果有人知道,请发帖到这个帖子。谢谢!

答案 1 :(得分:0)

这实际上是关于使用gzip的Etags的Apache的错误:

https://issues.apache.org/bugzilla/show_bug.cgi?id=45023

转动ETag的工作原理有效,但有更好的解决方法:

<IfModule mod_headers.c>
    RequestHeader  edit "If-None-Match" "^(.*)-gzip$" "$1"
    Header  edit "ETag" "^(.*[^g][^z][^i][^p])$" "$1-gzip"
</IfModule>