304 Not Modified
Der HTTP 304 Not Modified
Umleitungs-Statuscode zeigt an, dass es nicht nötig ist, die angeforderten Ressourcen erneut zu übertragen.
Dieser Antwortcode wird gesendet, wenn die Anfrage eine bedingte GET
- oder HEAD
-Anfrage mit einem If-None-Match
- oder einem If-Modified-Since
-Header ist und die Bedingung als 'false' bewertet wird. Er bestätigt, dass die vom Client zwischengespeicherte Ressource noch gültig ist und der Server eine 200 OK
-Antwort mit der Ressource gesendet hätte, wenn die Bedingung als 'true' bewertet worden wäre. Weitere Informationen finden Sie unter HTTP-Caching.
Die Antwort darf keinen Body enthalten und muss die Header einschließen, die in einer äquivalenten 200
-Antwort gesendet worden wären, wie zum Beispiel:
Hinweis:
Viele Entwicklerwerkzeuge in den Netzwerkkonsole von Browsern erzeugen überflüssige Anfragen, die zu 304
-Antworten führen, sodass der Zugriff auf den lokalen Cache für Entwickler sichtbar ist.
Status
304 Not Modified
Beispiele
304 Antwort auf bedingte Anfragen
Die folgenden Beispiele zeigen GET
-Anfragen, die mit curl unter Verwendung von bedingten Anforderungsheadern erstellt wurden. Das --http1.1
-Flag wird verwendet, um das HTTP/1.1-Protokoll für bessere Lesbarkeit zu erzwingen.
Die erste Anfrage nutzt eine If-Modified-Since
-Bedingung mit einem zukünftigen Datum vom 21. November 2050. Diese muss als false
bewertet werden, da die Ressource nicht nach einer Zeit aktualisiert worden sein kann, die noch nicht eingetreten ist:
curl --http1.1 -I --header 'If-Modified-Since: Tue, 21 Nov 2050 08:00:00 GMT' \
https://developer.mozilla.org/en-US/
Dies wird zu der folgenden HTTP-Anfrage führen:
GET /en-US/ HTTP/1.1
Host: developer.mozilla.org
User-Agent: curl/8.7.1
Accept: */*
If-Modified-Since: Tue, 21 Nov 2050 08:00:00 GMT
Die Antwort wäre 200 OK
mit der aktuellen Version der Ressource, falls die Ressource nach dem Zeitstempel im If-Modified-Since
-Header aktualisiert worden wäre. Stattdessen erhalten wir eine 304
-Antwort, die ETag
, Age
und Expires
-Header einschließt, die uns mitteilen, dass unsere zwischengespeicherte Version der Ressource weiterhin aktuell ist:
HTTP/1.1 304 Not Modified
Date: Wed, 28 Aug 2024 09:52:35 GMT
Expires: Wed, 28 Aug 2024 10:01:53 GMT
Age: 3279
ETag: "b20a0973b226eeea30362acb81f9e0b3"
Cache-Control: public, max-age=3600
Vary: Accept-Encoding
X-cache: hit
Alt-Svc: clear
Führen Sie nun einen weiteren curl
-Befehl aus, wobei Sie den etag
-Wert aus der vorherigen Antwort mit der If-None-Match
-Bedingung verwenden (da dieser etag
-Wert die aktuelle Version der Ressource auf dem Server ist, erwarten wir eine 304 Not Modified
-Antwort):
curl --http1.1 -I --header 'If-None-Match: "b20a0973b226eeea30362acb81f9e0b3"' \
https://developer.mozilla.org/en-US/
Dies wird zu der folgenden HTTP-Anfrage führen:
GET /en-US/ HTTP/1.1
Host: developer.mozilla.org
User-Agent: curl/8.7.1
Accept: */*
If-None-Match: "b20a0973b226eeea30362acb81f9e0b3"
Da der etag
-Wert zum Zeitpunkt der Anfrage übereinstimmt, schlägt die Bedingung der Entität-Tag fehl, und eine 304
-Antwort wird zurückgegeben:
HTTP/1.1 304 Not Modified
Date: Wed, 28 Aug 2024 10:36:35 GMT
Expires: Wed, 28 Aug 2024 11:02:17 GMT
Age: 662
ETag: "b20a0973b226eeea30362acb81f9e0b3"
Cache-Control: public, max-age=3600
Vary: Accept-Encoding
X-cache: hit
Alt-Svc: clear
Spezifikationen
Specification |
---|
HTTP Semantics # status.304 |
Kompatibilitätsnotizen
Das Verhalten der Browser unterscheidet sich, wenn diese Antwort fälschlicherweise einen Body bei persistenten Verbindungen enthält. Weitere Details finden Sie unter 204 No Content
.