wake-up-neo.com

if-modified-since vs if-none-Übereinstimmung

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?

85
Tower

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:

  • Wenn Sie Dateien bereitstellen, ist die Verwendung der Datei mtime als Datum Last-Modified die einfachste Lösung.
  • Wenn Sie eine dynamische Webseite bereitstellen, die aus mehreren SQL-Abfragen erstellt wurde, kann die Überprüfung, ob sich die von diesen Abfragen zurückgegebenen Daten geändert haben, unpraktisch sein (es sei denn, alle haben eine Spalte mit der letzten Änderung). In diesem Fall kann z. Ein MD5-Hash des Seiteninhalts als ETag wird wesentlich einfacher.
    OTOH, das bedeutet, dass Sie die gesamte Seite auf dem Server auch für ein bedingtes GET generieren müssen. Wenn Sie herausfinden, was genau in den ETag (Primärschlüssel, Revisionsnummern, ... usw.) gehen muss, können Sie hier viel Zeit sparen.

Weitere Informationen zum Thema finden Sie unter diesen Links:

106
trendels

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.

22
Gumbo

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.

13
Alex K

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

8

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.

5

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.

3
Thomas S. Trias

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. 

0
Serhan M.