Serverantwort 304 Not Modified
HTTP-Statuscode 304 (Not Modified)
Der HTTP-Statuscode 304 (Not Modified) ist eine Antwort des Servers, die anzeigt, dass die angeforderte Ressource seit der letzten Anfrage des Clients nicht verändert wurde. Dieser Statuscode wird verwendet, um die Effizienz des Cachings zu optimieren, indem die Übertragung von unveränderten Daten vermieden wird.
Hauptmerkmale des Statuscodes 304
- Definition und Zweck: Der Statuscode 304 signalisiert dem Client, dass er die im Cache gespeicherte Version der Ressource verwenden kann, da keine Änderungen vorgenommen wurden.
- Funktionsweise des Caching-Mechanismus: Der Server prüft die Bedingungen des Clients, um festzustellen, ob die Ressource seit dem letzten Abruf modifiziert wurde. Wenn nicht, sendet er den Status 304 zurück.
- Bedingungen für die Rückgabe des Status 304:
- Der Client muss spezifische Header wie If-Modified-Since oder If-None-Match senden.
- Die Ressource muss unverändert seit dem letzten Abruf sein.
Praktische Beispiele für den Statuscode 304
Beispiel mit Bild-Caching auf einer Webseite
Wenn ein Browser ein Bild von einer Webseite anfordert, speichert er dieses Bild im Cache. Bei einem erneuten Zugriff auf dieselbe Seite kann der Browser den Statuscode 304 zurückerhalten, wenn das Bild seit dem letzten Abruf nicht geändert wurde.
- Wie der Browser den Cache speichert: Der Browser speichert die Ressourcen zusammen mit dem Zeitpunkt des Abrufs.
- Verhalten bei wiederholter Anfrage: Der Browser sendet die Anfrage mit dem Header If-Modified-Since und erhält den Status 304, wenn das Bild unverändert ist.
Diese Header ermöglichen eine spezifische Abfrage der Ressource. Der Header If-Modified-Since enthält den Zeitstempel des letzten Abrufs, während If-None-Match den ETag der Ressource enthält.
Wenn der Server feststellt, dass die Ressource seit dem letzten Abruf nicht geändert wurde, sendet er den Status 304 zurück, was bedeutet, dass der Client die zwischengespeicherte Version verwenden kann.
Probleme mit dem Statuscode 304 in verschiedenen Programmiersprachen beheben
PHP
In PHP kann der Statuscode 304 durch das Setzen der entsprechenden Header verwaltet werden:
header("HTTP/1.1 304 Not Modified"); exit();
Hier ist ein Beispiel für das Handling von Anfragen und die Rückgabe des Status 304:
if (strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == filemtime($file)) { header("HTTP/1.1 304 Not Modified"); exit(); }
Python (Flask)
In Flask kann der Statuscode 304 durch die Überprüfung des Cache-Status konfiguriert werden:
from flask import Flask, request, make_response app = Flask(__name__) @app.route('/resource') def resource(): last_modified = 'Date_of_last_modification' response = make_response('Data') response.headers['Last-Modified'] = last_modified if request.headers.get('If-Modified-Since') == last_modified: return make_response('', 304) return response
Node.js (Express)
In Express wird der Statuscode 304 durch die Verwaltung der Header If-Modified-Since behandelt:
app.get('/resource', (req, res) => { const lastModified = 'Date_of_last_modification'; if (req.headers['if-modified-since'] === lastModified) { return res.status(304).end(); } res.set('Last-Modified', lastModified); res.send('Data'); });
Häufige Fehler und deren Behebung
- Falsche Cache-Konfiguration auf dem Server: Überprüfen Sie die Servereinstellungen, um sicherzustellen, dass das Caching korrekt konfiguriert ist.
- Fehlerhafte Anfrage-Header: Stellen Sie sicher, dass die Header If-Modified-Since und If-None-Match korrekt gesendet werden.
- Überprüfung und Debugging des Status 304: Nutzen Sie Debugging-Tools, um die Anfragen und Antworten im Detail zu analysieren.
Problem | Ursache | Lösung |
---|---|---|
304 Not Modified wird nicht gesendet | Header fehlen oder falsch konfiguriert | Überprüfen Sie die Header-Implementierung |
Cache wird nicht verwendet | Cache-Control falsch gesetzt | Richtige Cache-Control-Header hinzufügen |
Unnötige Datenübertragung | Server sendet immer die Daten | Implementieren Sie die 304-Logik |
Durch das Verständnis und die korrekte Implementierung des HTTP-Statuscodes 304 können Entwickler die Effizienz ihrer Anwendungen erheblich steigern und die Benutzererfahrung verbessern.