Frage

Es scheint zwei verschiedene Möglichkeiten, um bedingte Anfragen zu implementieren unter Verwendung von HTTP-Header, die beide für das Caching verwendet werden kann, Bereichsanforderungen, Concurrency Control etc ...:

  1. If-Unveränderte-Since und If-Modified-Since , wo der Kunde ein sendet Zeitstempel der Ressource.
  2. If-Modified und If-None-Modified , wo der Kunde sendet eine ETag Darstellung der Ressource.

In beiden Fällen sendet der Client eine Information es über die Ressource hat, die der Server ermöglicht, um zu bestimmen, ob die Ressource, da der Client das letzte Mal sah sie sich geändert hat. Der Server entscheidet dann, ob die Anforderung auszuführen, je nach dem bedingten Header vom Kunden geliefert wird.

Ich verstehe nicht, warum zwei unterschiedliche Ansätze zur Verfügung stehen. Sicherlich ersetzt ETags Zeitstempel, da der Server könnte ganz leicht ETags von Zeitstempeln erzeugen wählen.

Also, meine Fragen sind:

  • In welchen Szenarien könnten Sie bevorzugen If-Unveränderte-Since / If-Modified-Since über ETags?
  • In welchen Szenarien müssen Sie beide?
War es hilfreich?

Lösung

Ich habe einmal die gleiche Sache nachgedacht und erkannt, dass es ein Unterschied ist, die ganz wichtig ist: Daten können bestellt werden, ETags nicht.

Das bedeutet, dass, wenn einige Ressourcen vor einem Jahr geändert wurden, aber nie da, und wir wissen es. Dann können wir richtig ein If-Unveränderte-Since Anfrage für beliebige Tage, die im letzten Jahr beantworten und darüber einig, dass sicher ... es hat sich seit diesem Zeitpunkt nicht modifizierten gewesen.

Ein Etag ist nur vergleichbar Identität. Entweder es ist das gleiche oder es nicht ist. Wenn Sie die gleiche Ressource wie oben, und im Laufe des Jahres hat sich die docroot auf eine neue Festplatte und Dateisystem verschoben worden, so dass alle Dateien neu Inodes aber die Erhaltung Änderungsdaten. Und jemand hatte die ETags auf Datei Inode-Nummer basiert. Dann können wir nicht sagen, dass der alte ETag noch in Ordnung ist, ohne ein Protokoll mit Vergangenheit noch in Ordnung-ETags.

So sehe ich sie nicht als eine die andere obsoleting. Sie sind für verschiedene Situationen. Entweder man kann leicht ein Last-Modified-Datum aller Daten auf der Seite erhalten Sie sind zu dienen, oder Sie können leicht einen ETag für das, was Sie dienen.

Wenn Sie eine dynamische Webseite mit Daten aus vielen db-Lookups haben könnte es schwierig sein, zu sagen, was das Datum der letzten Änderung ist ohne Ihre Datenbank machen enthalten viele Änderungsdaten. Aber man kann immer ein MD5-Prüfsumme der Ergebnis gemacht Seite machen.

Wenn Sie diese Cache-Protokolle unterstützt definitiv ich nur einer von ihnen gehen, nie beides.

Andere Tipps

Es gibt einen ziemlich großen Unterschied: Ich kann nur ETags verwenden, wenn ich bereits den Server für einen in der Vergangenheit gefragt. Zeitstempel, OTOH, kann ich, wie ich entlang ausmachen.

einfacher Grund:. Abwärtskompatibilität

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top