Caching von Bildanforderungen über PHP - Wenn-Geändert-Seit wird nicht gesendet

Ich biete Bilder über PHP an und habe einige Probleme, sie so einzurichten, dass sie mit 304 Headern antworten, um Ladezeit zu sparen.

Den größten Teil des Codes habe ich auf php.net gefunden. Es funktioniert, antwortet jedoch IMMER mit 200.Aus irgendeinem Grund wird der If-Modified-Since-Header bei keiner Anfrage empfangen, obwohl ich den Last-Modified-Header ursprünglich sende. Dies geschieht auf einem Apache-Server. Irgendeine Idee, was falsch sein könnte?

Beispiel hier.

Diese Seite lädt das Bild von der Festplatte und zeigt es dem Browser zusammen mit dem Senden eines zuletzt geänderten Headers an. Wenn Sie die Seite aktualisieren, sendet der Browser keinen If-Modified-Since-Header, wie er sollte.

<code>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);

}
</code>

Antworten auf die Frage(5)

Ihre Antwort auf die Frage