在PHP中回答HTTP_IF_MODIFIED_SINCE和HTTP_IF_NONE_MATCH [英] Answering HTTP_IF_MODIFIED_SINCE and HTTP_IF_NONE_MATCH in PHP
问题描述
我使用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屋!