【发布时间】:2013-07-25 09:26:56
【问题描述】:
我正在尝试使用 mod_cache 来缓存动态生成的内容。这是我的 Apache 配置:
CacheEnable mem /
MCacheSize 4096
MCacheMaxObjectCount 100
MCacheMinObjectSize 1
MCacheMaxObjectSize 2048
CacheIgnoreCacheControl On
CacheIgnoreNoLastMod On
CacheStorePrivate On
CacheStoreNoStore On
<Location /cgi-bin>
SetHandler cgi-script
Options +ExecCGI
</Location>
这是一个 CGI 脚本(仅用于测试):
#!/opt/app/phantomjs/bin/phantomjs
var date = new Date('Sun, 01 Jan 2012 00:00:00 GMT');
console.log('Last-Modified: '+ date.toUTCString());
console.log('Cache-Control: max-age=' + (365 * 24 * 60 * 60)+ ', public');
date.setDate(date.getDate() + 365);
console.log('Expires: '+ date.toUTCString() + '\n\n');
// lengthy operation here...
console.log(content);
这基本上有效。但是会发生什么,如果客户端请求带有If-Modified-Since 标头的 cgi-bin:
- CGI 脚本流标头
- 延迟几秒
- CGI 脚本流正文
- Apache 发送 304
这对我来说毫无意义。 Apache 在发送未修改的响应之前等待整个响应。
我的预期:
- CGI 脚本流标头
- Apache 发送 304
- CGI 脚本被取消或 CGI 脚本主体被丢弃
有什么办法可以解决吗?
【问题讨论】:
-
另外,我刚刚发现当我的cgi脚本显式设置
Status: 200时,mod_cache似乎根本没有任何效果,但是如果cgi没有发送状态标头,它会发送304。