【发布时间】:2010-11-05 12:51:02
【问题描述】:
我正在通过 php 提供图像,并且在将其设置为响应 304 标头以节省加载时间时遇到了一些问题。
下面的大部分代码都是我在 php.net 上找到的。它可以工作,但总是以 200 响应。由于某种原因,即使我最初发送 Last-Modified 标头,任何请求都没有收到 If-Modified-Since 标头。这是在一个阿帕奇服务器。知道可能出了什么问题吗?
此页面将从磁盘加载图像并将其显示到浏览器,同时发送 Last-Modified 标头。如果刷新页面,浏览器不会像它应该发送的那样发送 If-Modified-Since 标头。
define('SITEPATH', (dirname($_SERVER['SCRIPT_NAME']) == '/') ? '/' : dirname($_SERVER['SCRIPT_NAME']).'/');
$load_path = $_SERVER['DOCUMENT_ROOT'] . SITEPATH . 'fpo_image.jpg';
// Get headers sent by the client.
$headers = apache_request_headers();
$file_time = filemtime($load_path);
header('Cache-Control: must-revalidate');
header('Last-Modified: '.gmdate('D, d M Y H:i:s', $file_time).' GMT');
if (isset($headers['If-Modified-Since']) && (strtotime($headers['If-Modified-Since']) == $file_time)) {
header('HTTP/1.1 304 Not Modified');
header('Connection: close');
} else {
header('HTTP/1.1 200 OK');
header('Content-Length: '. filesize($load_path));
header('Content-type: image/jpeg');
readfile($load_path);
}
【问题讨论】:
-
+1 提问! If-Modified since 标头返回完整内容而不是 304 的一个非常相似的问题:stackoverflow.com/questions/4810806/…