我有一个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标头?答案 0 :(得分:4)
可悲的是,是的,你的期望是错误的。
在你基本上对Apache说“好的,我正在处理这个请求......”时,Apache将把一切责任移交给你。如果您希望请求遵循If-Modified-Since,则由您的代码决定。
面对现实,这是正确的行为,因为Apache无法通过Perl处理程序知道你/真正/意味着什么'修改':可能最好的检查是查询你的后端数据库记录上的时间戳,例如....
答案 1 :(得分:2)
Apache在处理请求时不会存储您上次修改的值。因此,为了确定是否修改了某些内容,必须运行您的应用程序。