我正在通过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/

10-13 03:39