我正在通过php提供图像,并且在设置它以响应304 header 时存在一些问题,以节省加载时间。
我在php.net上找到的以下大多数代码。它可以工作,但是始终以200响应。出于某种原因,即使我最初发送的是Last-Modified头,也未在任何请求上接收If-Modified-Since头。 这是在apache服务器上完成的。任何想法可能有什么问题吗?
Example here.
该页面将从磁盘加载图像并将其显示到浏览器,并发送Last-Modified header 。如果刷新页面,浏览器将不会发送应有的If-Modified-Since header 。
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);
}
最佳答案
我相信应该
if (isset($headers['If-Modified-Since']) && (strtotime($headers['If-Modified-Since']) >= $file_time)) {
检查修改时间是否大于或等于而不是等于。尽管我确实知道这两个值应该相同。
关于php - 通过PHP缓存图像请求-如果未发送,则为If-Modified-,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1038638/