gpt4 book ai didi

apache - 如何使 mod_cache 与动态内容一起正常工作?

转载 作者:行者123 更新时间:2023-12-02 05:05:30 24 4
gpt4 key购买 nike

我正在尝试使用 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 header 的cgi-bin:

  1. CGI 脚本流 header
  2. 延迟几秒
  3. CGI 脚本流正文
  4. Apache 发送 304

这对我来说毫无意义。 Apache 在发送未修改的响应之前等待整个响应。

我的预期:

  1. CGI 脚本流 header
  2. Apache 发送 304
  3. CGI 脚本被取消或 CGI 脚本主体被丢弃

有什么办法可以做到吗?

最佳答案

CGI 脚本应更改如下。

  1. 不要使用静态的上次修改日期。动态资源的Last-Modified应该设置为当前执行时间。

  2. 缓存控制指令包含类型错误 'pulic' 应该是 'public'

  3. 不需要 Expires 指令,因为 Cache-Control 的优先级高于 Expires。

发送 header 后您预期的行为“终止 CGI 脚本”是不可能的。如果您的缓存有效,则在缓存条目失效之前不会执行 CGI 脚本。

关于apache - 如何使 mod_cache 与动态内容一起正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12155876/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com