Я передаю изображения через php, и у меня возникли некоторые проблемы с настройкой ответа на 304 заголовка, чтобы сэкономить время загрузки.
Большая часть кода ниже я нашел на php.net. Это работает, однако ВСЕГДА отвечает 200. По какой-то причине заголовок If-Modified-Since не принимается ни по каким запросам, даже если я отправляю заголовок Last-Modified изначально. Это делается на сервер Apache. Есть идеи, что может быть не так?
Пример здесь.
Эта страница загрузит изображение с диска и отобразит его в браузере вместе с отправкой заголовка 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);
}