【发布时间】:2013-10-07 13:24:24
【问题描述】:
我对 mod_cache 和 ETags 有疑问。这是我的场景:
环境:Firefox、Apache 2.2.22(Mac OSX 默认)、任何 Web App,Apache 是 Web App 的代理
初始状态:
- 浏览器有一个(过期的)doc /aaa 缓存版本,ETag=123
- Apache 有一个(过期的)doc /aaa 缓存版本,ETag=123
场景:
- 浏览器请求 /aaa, If-None-Match: 123
- Apache 请求 /aaa, If-none-Match: 123 来自 Web 应用
- Web 应用返回 304
- Apache 将其缓存版本返回到浏览器 (200)
Apache 不应该向浏览器返回 304 吗?
附加信息:
- 如果 Apache 没有缓存版本的 /aaa,他将 ETag 转发给 Web App,得到 304,然后返回 304 给浏览器
- 使用 Last-Modified/If-Modified-Since 而不是 ETags 工作(从 Web 应用程序获取 304 后,Apache 将 304 返回到浏览器)
一个更简单的场景:
- Apache 版本未过期 (ETag: 123) - 他不需要从 Web App 获取刷新
- GET /aaa, If-None-Match: 123
- 响应:200(而不是 304?)
apache 配置
CacheRoot /private/var/log/apache2/cache/
CacheEnable disk /
CacheDirLevels 5
CacheDirLength 3
CacheIgnoreCacheControl On
CacheIgnoreHeaders Set-Cookie
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / ajp://localhost:8009/ retry=0
ProxyPassReverse / ajp://localhost:8009/
ProxyPreserveHost on
请求/响应标头:
GET / HTTP/1.1
Accept: */*
If-None-Match: 123456
HTTP/1.1 200 OK
Date: Tue, 01 Oct 2013 14:01:16 GMT
ETag: 123456
Expires: Tue, 01 Oct 2013 14:30:55 GMT
Cache-Control: max-age=1800
Content-Language: en-US
Age: 21
Content-Length: 20186
Content-Type: text/html;charset=UTF-8
【问题讨论】:
-
可以添加相关配置吗?以及产生这个的所有请求和响应的确切标头?
-
我有同样的问题很长时间了,无法适应它:(
-
您使用的是 gzip 吗(如果没有,为什么不使用!)?如果您的请求/响应标头不是,但不确定这是否是缩减集。如果是这样,请尝试关闭 Etags,它应该可以工作,因为 Apache 中存在带有 Etags 和 Gzip 的错误。如果事实证明是这样,将在答案中解释更多。