在PHP中回答HTTP_IF_MODIFIED_SINCE和HTTP_IF_NONE_MATCH [英] Answering HTTP_IF_MODIFIED_SINCE and HTTP_IF_NONE_MATCH in PHP

查看:470
本文介绍了在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 304Not Modified



什么是正确的条件?当我发出一个304而不是整个内容?



有问题的接受答案
如何知道何时发送一个304 Not Modified响应似乎正确地发布了这个,但是我



谢谢!

解决方案

我一直使用:

 函数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();
}
}
}

不记得我是写了它还是从其他地方得到它......



我通常以这种方式在文件顶部使用它:
$ b $ pre code $ caching_headers($ _SERVER ['SCRIPT_FILENAME'],filemtime($ _ SERVER ['SCRIPT_FILENAME']));


I have cacheable dynamic content made in PHP 5.1.0+. I already send the correct headers (including Last-Modified and ETag) to clients.

I now want my script to be able to answer $_SERVER['HTTP_IF_MODIFIED_SINCE'] and $_SERVER['HTTP_IF_NONE_MATCH'] when present. When the conditions matches, I want to answer a HTTP 304 "Not Modified" to clients.

What are the correct conditions? When exactly I issue a 304 instead of the whole content?

The accepted answer in question How to know when to send a 304 Not Modified response seems to issue this correctly but I have hard times to port that code to PHP 5.

Thank you!

解决方案

I've always used:

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();
        }
    }
}

Don't remember whether I wrote it or got it from somewhere else...

I'm normally using it at the top of a file in this way:

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

这篇关于在PHP中回答HTTP_IF_MODIFIED_SINCE和HTTP_IF_NONE_MATCH的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆