Was könnte der Unterschied zwischen if-modified-since und if-none sein? Ich habe das Gefühl, dass if-none-match für Dateien verwendet wird, if-modified-since für Seiten?
Bezüglich der Unterschiede zwischen Last-Modified/If-Modified-Since
und ETag/If-None-Match
:
Beide können austauschbar verwendet werden. Abhängig von der Art der Ressource und wie sie auf dem Server generiert wird, ist die eine oder andere Frage ("Wurde dies seit ... geändert?"/"Passt dies immer noch mit diesem ETag?") Möglicherweise einfacher zu beantworten .
Beispiele:
mtime
als Datum Last-Modified
die einfachste Lösung.ETag
wird wesentlich einfacher.Weitere Informationen zum Thema finden Sie unter diesen Links:
If-Modified-Since
wird mit der Last-Modified
verglichen, während If-None-Match
mit ETag
verglichen wird. Sowohl Modified-Since
als auch ETag
können verwendet werden, um eine bestimmte Variante einer Ressource zu identifizieren.
Beim Vergleich von If-Modified-Since
mit Last-Modified
erhalten Sie jedoch die Information, ob die zwischengespeicherte Variante älter oder neuer ist, während der Vergleich von If-None-Match
mit ETag
Ihnen lediglich die Information gibt, ob beide identisch sind oder nicht. Außerdem enthalten die meisten ETag
-Generatoren die Informationen des systemspezifischen inode , so dass das Verschieben einer Datei auf ein anderes Laufwerk möglicherweise auch die ETag
ändert.
Der Zeitstempelwert, der in Last-Modified/If-Modified-Since verwendet wird, hat eine begrenzte Genauigkeit - eine Sekunde, und dies ist einfach nicht ausreichend für sich schnell ändernde Inhalte, wie z. B. eine Web-Chat-Anwendung, in der mehr als eine Nachricht pro Sekunde gepostet werden kann . ETag/If-None-Match kann helfen, dieses Problem zu lösen.
Wie es in den bewährten Vorgehensweisen von Google heißt:
Es ist wichtig, für alle zwischengespeicherten Ressourcen eines von Expires oder Cache-Control max-age und eines von Last-Modified oder ETag anzugeben. Es ist überflüssig, sowohl Expires als auch Cache-Control anzugeben: max-age oder sowohl Last-Modified als auch ETag.
https://developers.google.com/speed/docs/best-practices/caching
If-Modified-Since verwendet ein Datum, während If-None-Match ein ETag verwendet. Sie können sowohl für "Seiten" (d. H. HTML) als auch für andere Dateien verwendet werden.
Sofern vom Server nicht als schwach angegeben, gilt ein ETag als starker Prüfer und kann daher verwendet werden, um eine bedingte Fernabfrage zu erfüllen. Die meisten automatisch generierten ETags weisen jedoch in Serverfarmsituationen Schwierigkeiten auf, da sie häufig Inode-Informationen und/oder einen eindeutigen permanenten Zähler verwenden. In der Praxis habe ich festgestellt, dass der Kopf der letzten Änderung für ziemlich statischen Inhalt ausreichend ist, z. Bereitstellung geschützter statischer Inhalte, da die Schreibzeit der Datei ein relativ guter Prüfer ist.
Das ETag ist bei weitem das flexibelste. Konforme Kunden müssen das ETag in einer bedingten Anfrage senden, SOLLTEN jedoch beide, sofern verfügbar, senden.
Mit dem Header "If-Modified-Since" wird der Zeitpunkt angegeben, zu dem der Browser die angeforderte Ressource zuletzt empfangen hat. Mit dem Header If-None-Match wird das Entity-Tag angegeben, das der Server beim letzten Empfang mit der angeforderten Ressource ausgegeben hat.
Auf zwei Arten werden diese Header verwendet, um das Zwischenspeichern von Inhalten im Browser zu unterstützen, und sie ermöglichen dem Server, den Browser anzuweisen, eine zwischengespeicherte Kopie einer Ressource zu verwenden, anstatt mit dem vollständigen Inhalt der Ressource zu antworten, falls dies der Fall ist nicht nötig.