在PHP中回答HTTP_IF_MODIFIED_SINCE和HTTP_IF_NONE_MATCH

我在 PHP 5.1.0中制作了可缓存的动态内容.我已经向客户端发送了正确的头文件(包括Last-Modified和ETag).

我现在希望我的脚本能够在存在时回答$_SERVER [‘HTTP_IF_MODIFIED_SINCE’]和$_SERVER [‘HTTP_IF_NONE_MATCH’].当条件匹配时,我想对客户端回答HTTP 304“未修改”.

什么是正确的条件?当我发布304而不是整个内容的时候?

接受的答案有问题
How to know when to send a 304 Not Modified response似乎正确发布,但我很难将该代码移植到PHP 5.

谢谢!

我一直用:
function caching_headers ($file,$timestamp) {
    $gmt_mtime = gmdate('r',$timestamp);
    header('ETag: "'.md5($timestamp.$file).'"');
    header('Last-Modified: '.$gmt_mtime);
    header('Cache-Control: public');

    if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) || isset($_SERVER['HTTP_IF_NONE_MATCH'])) {
        if ($_SERVER['HTTP_IF_MODIFIED_SINCE'] == $gmt_mtime || str_replace('"','',stripslashes($_SERVER['HTTP_IF_NONE_MATCH'])) == md5($timestamp.$file)) {
            header('HTTP/1.1 304 Not Modified');
            exit();
        }
    }
}

不记得我写的还是从别的地方得到的…

我通常以这种方式在文件的顶部使用它:

caching_headers ($_SERVER['SCRIPT_FILENAME'],filemtime($_SERVER['SCRIPT_FILENAME']));

相关文章

Hessian开源的远程通讯,采用二进制 RPC的协议,基于 HTTP 传输。可以实现PHP调用Java,Python,C#等多语...
初识Mongodb的一些总结,在Mac Os X下真实搭建mongodb环境,以及分享个Mongodb管理工具,学习期间一些总结...
边看边操作,这样才能记得牢,实践是检验真理的唯一标准.光看不练假把式,光练不看傻把式,边看边练真把式....
在php中,结果输出一共有两种方式:echo和print,下面将对两种方式做一个比较。 echo与print的区别: (...
在安装好wampServer后,一直没有使用phpMyAdmin,今天用了一下,phpMyAdmin显示错误:The mbstring exte...
变量是用于存储数据的容器,与代数相似,可以给变量赋予某个确定的值(例如:$x=3)或者是赋予其它的变...