Antworten:
In Bezug auf die Unterschiede zwischen Last-Modified/If-Modified-Since
undETag/If-None-Match
:
Beide können austauschbar verwendet werden. Abhängig von der Art der Ressource und der Art und Weise, wie sie auf dem Server generiert wird, ist die eine oder andere Frage ("Wurde dies seit ... geändert?" / "Stimmt dies immer noch mit diesem ETag überein?") Möglicherweise einfacher zu beantworten .
Beispiele:
mtime
als Last-Modified
Datum die einfachste Lösung.ETag
viel einfacher. Weitere Informationen zum Thema finden Sie unter diesen Links:
If-Modified-Since
wird mit dem verglichen, Last-Modified
während If-None-Match
mit verglichen wird ETag
. Beides Modified-Since
und ETag
kann verwendet werden, um eine bestimmte Variante einer Ressource zu identifizieren.
Der Vergleich von If-Modified-Since
to Last-Modified
gibt Ihnen jedoch Auskunft darüber, ob die zwischengespeicherte Variante älter oder neuer ist, während der Vergleich von If-None-Match
to ETag
nur Auskunft darüber gibt, ob beide identisch sind oder nicht. Darüber hinaus enthalten die meisten ETag
Generatoren die Informationen des systemspezifischen Inodes, sodass das Verschieben einer Datei auf ein anderes Laufwerk dies ebenfalls ändern kann ETag
.
Der in Last-Modified / If-Modified-Since verwendete Zeitstempelwert hat eine begrenzte Genauigkeit - eine Sekunde. Dies reicht einfach nicht aus, um Inhalte schnell zu ändern, z. B. eine Web-Chat-Anwendung, bei der mehr als eine Nachricht pro Sekunde gesendet werden kann . ETag / If-None-Match kann helfen, dieses Problem zu lösen.
Wie in den Best Practices von Google angegeben:
Es ist wichtig, für alle zwischengespeicherten Ressourcen eines der maximalen Alter "Expires" oder "Cache-Control" und eines der Elemente "Last-Modified" oder "ETag" anzugeben. Es ist redundant, sowohl Expires als auch Cache-Control: max-age oder Last-Modified und ETag anzugeben.
https://developers.google.com/speed/docs/best-practices/caching
Last-Modified
mit ETag
(oder auf der Useragent-Seite If-Modified-Since
mit If-None-Match
) erwähnt. Ebenso schränkt Sie die W3-Spezifikation nicht ein. Es sagt nicht zu verwenden , If-Modified-Since
mit If-Match
, aber ich nehme an das ist , weil die Menge der Dokumente , die Daten aktualisiert haben aber den gleichen Inhalt wie von der ETag definiert sollte recht klein sein.
If-Modified-Since verwendet ein Datum, während If-None-Match ein ETag verwendet . Sie können sowohl für "Seiten" (dh HTML) als auch für andere Dateien verwendet werden.
Sofern vom Server nicht als schwach angegeben, wird ein ETag als starker Validator angesehen und kann daher verwendet werden, um eine bedingte Entfernungsanforderung zu erfüllen. Die meisten automatisch generierten ETags weisen jedoch Schwierigkeiten in Serverfarmsituationen auf, da sie häufig Inode-Informationen und / oder einen eindeutigen dauerhaften Zähler verwenden. In der Praxis habe ich festgestellt, dass der Header "Last Modified" für ziemlich statische Inhalte ausreicht, z. B. für geschützte statische Inhalte, da die Schreibzeit der Datei einen recht guten Validator darstellt.
Der ETag ist bei weitem der flexibelste. Konforme Clients müssen das ETag in einer bedingten Anforderung senden, während sie beide senden sollten, falls verfügbar.
Der If-Modified-Since-Header wird verwendet, um den Zeitpunkt anzugeben, zu dem der Browser die angeforderte Ressource zuletzt empfangen hat. Der If-None-Match-Header wird verwendet, um das Entitäts-Tag anzugeben, das der Server beim letzten Empfang mit der angeforderten Ressource ausgegeben hat.
Auf die beiden beschriebenen Arten werden diese Header verwendet, um das Zwischenspeichern von Inhalten im Browser zu unterstützen, und sie ermöglichen es dem Server, den Browser anzuweisen, eine zwischengespeicherte Kopie einer Ressource zu verwenden, anstatt in diesem Fall mit dem vollständigen Inhalt der Ressource zu antworten nicht nötig.