Apache2 mod_perl忽略Last-Modified标头

时间:2009-04-23 14:44:50

标签: perl apache2 mod-perl last-modified

我有一个perl生成的页面。此页面的内容每30分钟更改一次,因此我将$ r-> set_last_modified()设置为内容上次更改的时间。

一切正常,我可以看到正确的标题到达我的浏览器。

当我刷新页面时,我看到我的浏览器在对服务器的请求中使用了正确的“If-Modified-Since”标题,但Apache2忽略了这一点并重新发送整个页面。

如何让Apache2正常运行并使用“HTTP / 1.x 304 Not Modified”进行响应?

(从同一个Apache2进程请求静态内容时,正确处理“last-modified”/“if-modified-since”标头。)

感谢您的帮助。

编辑:我的期望是错的吗?我是否必须在perl脚本中显式处理入站的If-Modified-Since标头?

2 个答案:

答案 0 :(得分:4)

可悲的是,是的,你的期望是错误的。

在你基本上对Apache说“好的,我正在处理这个请求......”时,Apache将把一切责任移交给你。如果您希望请求遵循If-Modified-Since,则由您的代码决定。

面对现实,这是正确的行为,因为Apache无法通过Perl处理程序知道你/真正/意味着什么'修改':可能最好的检查是查询你的后端数据库记录上的时间戳,例如....

答案 1 :(得分:2)

Apache在处理请求时不会存储您上次修改的值。因此,为了确定是否修改了某些内容,必须运行您的应用程序。