Welcher der folgenden beiden Header wird bei zwei nachfolgenden Anforderungen von Browsern stärker gewichtet, sollte einer von ihnen geändert werden: ETag oder Last-Modified?
quelle
Welcher der folgenden beiden Header wird bei zwei nachfolgenden Anforderungen von Browsern stärker gewichtet, sollte einer von ihnen geändert werden: ETag oder Last-Modified?
Gemäß RFC 2616, Abschnitt 13.3.4, MUSS ein HTTP 1.1-Client das ETag in allen Cache-bedingten Anforderungen verwenden. Wenn sowohl ein ETag als auch Last Modified vorhanden sind, sollte er beide verwenden. Der ETag-Header wird als starker Validator angesehen (siehe Abschnitt 13.3.3), sofern er nicht vom Server ausdrücklich als schwach deklariert wird, während der Header "Zuletzt geändert" als schwach angesehen wird, sofern nicht mindestens ein winziger Unterschied zwischen ihm und dem Datums-Header besteht. Beachten Sie jedoch, dass der Server auch nicht senden muss (dies sollte jedoch geschehen, wenn dies möglich ist).
Beachten Sie, dass der Client die Header nicht überprüft, um festzustellen, ob sie sich geändert haben. es verwendet sie nur blind in der nächsten bedingten Anfrage; Es ist Sache des Servers, zu bewerten, ob der angeforderte Inhalt oder eine nicht geänderte Antwort gesendet werden soll. Wenn der Server nur einen sendet, verwendet der Client diesen allein (obwohl nur starke Validatoren für eine Bereichsanforderung nützlich sind). Natürlich liegt es auch im Ermessen der Zwischen-Caches (es sei denn, sie wurden über Cache-Steuerungsanweisungen am Caching gehindert) und des Servers, wie sie auf die Header reagieren. Der RFC gibt an, dass er NICHT 304 Not Modified zurückgeben darf, wenn die Validatoren inkonsistent sind. Da die Header-Werte jedoch vom Server generiert werden, hat er einiges an Spielraum.
In der Praxis habe ich festgestellt, dass Chrome, FireFox und IE 7+ beide Header senden, sofern verfügbar. Ich habe auch das Verhalten beim Senden geänderter Header getestet, was ich bereits anhand der Informationen im RFC vermutet hatte. Die vier von mir getesteten Clients haben nur bedingte Anforderungen gesendet, wenn die Seite (n) aktualisiert wurden oder wenn die Seite zum ersten Mal vom aktuellen Prozess angefordert wurde.
Ist es nicht eher ein "ODER" -Ausdruck? Im Pseudocode:
quelle
=! ist der richtige Vergleichsoperator. Der Client muss die vom Server empfangene Literalzeichenfolge beibehalten, da durch Konvertierungen kleine Unterschiede entstehen können. Sie können nicht davon ausgehen, dass "neuer ist besser".
Warum? Stellen Sie sich den Fall vor, in dem der Serverbetreiber eine fehlerhafte Version einer Ressource zurücksetzt. Die zurückgesetzte Version ist ÄLTER - aber korrekt.
Der Client muss die aktuell vom Server angebotene Version verwenden. Eine zwischengespeicherte Version kann nur verwendet werden, wenn sie identisch ist. Daher muss der Server die Gleichheit prüfen, nicht "neuer".
quelle