3

我对 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 from Web App
  • 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 获得刷新
  • 获取 /aaa,如果没有匹配:123
  • 响应:200(而不是 304?)

阿帕奇会议

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
4

1 回答 1

1

根据协议规范, If-None-Match 标头应该用"包装。

尝试发送:

If-None-Match: "123"
于 2015-10-23T18:27:03.070 回答