Wann ETags verwendet werden sollen und wann nicht


9

Ich habe mir gerade unsere Website auf WebPageTest.org angesehen und eine ihrer Empfehlungen zur Beschleunigung einer Website lautet:

ETag-Header sollten im Allgemeinen nicht verwendet werden, es sei denn, Sie haben einen expliziten Grund, sie zu benötigen

Ich habe mich gefragt, was das bedeutet. Bedeutet dies, dass statische Inhalte, von denen Sie wissen, dass sie sich nicht ändern, sie nicht haben sollten, oder bedeutet dies, dass Inhalte, von denen Sie wissen, dass sie sich regelmäßig ändern, sie nicht haben sollten, oder bedeutet dies, dass Sie sie nicht generell verwenden sollten, es sei denn, Sie haben eine spezifischer Bedarf.

Wenn es das letztere ist, wann ist der richtige Zeitpunkt, sie zu verwenden? Vielen Dank für jede Hilfe.

Antworten:


8

ETags sind eine Alternative zu "Last-Modified-Time" (können aber in Kombination mit dieser verwendet werden), um die Cache-Validierung zu bestimmen.

Der Client kann eine Vorbedingung senden, z. B. Wenn-Übereinstimmungen oder Wenn-Keine-Übereinstimmungen basierend auf dem ETag. Dies gilt nicht nur für GET-Anforderungen (wie dies bei webpagetest.org der Fall ist). Sie können die "opportunistische Aktualisierung" verwenden, sodass eine PUT-Anforderung eine Vorbedingung hat und den Aktualisierungsvorgang nicht ausführt, wenn die Ressource seit dem ETag aktualisiert wurde zuletzt erworben.

Einfach ausgedrückt: Sie klicken auf einer Seite in Ihrem CMS auf Bearbeiten, Ihr Freund auf einer Seite in Ihrem CMS auf Bearbeiten, Ihr Freund führt die Bearbeitung durch und klickt auf Speichern, und schließlich klicken Sie auf Speichern - ohne einen ETag- oder Content-MD5-HTTP-Header, den Sie benötigen würden Um das Rad neu zu erfinden und Probleme zu vermeiden (z. B. wenn Sie die Änderungen Ihrer Freunde löschen), ist die Lösung bereits Teil des HTTP-Protokolls und daher sinnvoll, es nur zu verwenden.

Im Allgemeinen stimme ich AOL (die webpagetest.org ausführen) in Bezug auf ihre "Einheitsgröße" -Ratschläge zu - es ist besser, HTTP-Header nicht mit kryptischen Zeichenfolgen zu verstopfen (ETags sind im Allgemeinen nicht hübsch oder von Menschen lesbar), wenn ein zweiter Unterschied besteht ( welche Last-Modified-Time erkennen kann) wird für den vorliegenden Job tun.

Wenn eine Seite mehrmals pro Sekunde aktualisiert wird und unbedingt die aktuellste Version angezeigt werden muss, können Sie mit anderen Lösungen als HTTP-GETs experimentieren oder einfach ETags verwenden.

Achten Sie darauf, dass Ihre ETags keine Informationen pro Dateisystem, pro Serverkonfigurationsänderung usw. enthalten (z. B. Inodes, die bei Apache standardmäßig verwendet werden). Andernfalls treten Probleme auf, wenn zwei Server vorhanden sind (die ETags von jedem Server stimmen nicht überein).


Kein Problem. Es gibt ein Beispiel, dessen ich mir nicht sicher bin: Wenn Sie mehrere Versionen von Inhalten auf einem URI haben (z. B. eine mobile oder eine Internet Explorer-Version), können ETags verwendet werden, um JEDE Version nach einer Übereinstimmung zu durchsuchen (daher heißt es if- keine Übereinstimmungen nicht wenn nicht übereinstimmen) - Je nachdem, wen Sie fragen, gibt es unterschiedliche Antworten (z. B. keine permanente URI für mehrere Darstellungen usw.).
Metalshark

7

Um Coding Horrors hervorragende Bewertung des YSlow Firebug-Plugins zu paraphrasieren (das anscheinend von WebPageTest.org als Grundlage für ihre Bewertung verwendet wird):

"Yahoo ist eine der meistbeschäftigten Websites der Welt - seine Probleme sind wahrscheinlich nicht Ihre Probleme."

Wenn Sie nicht jeden Tag mit Millionen von Unikaten in Ihrem Netzwerk mit Lastenausgleich zu tun haben, besteht eine gute Chance, dass die Vorschläge bei der Optimierung Ihrer Website nicht die richtige Wahl sind.


Ich schätze den Kommentar, aber du liegst falsch. Steve Sounders erklärt hier: stevesouders.com/blog/2010/09/07/webpagetest-org-and-page-speed (Er ist ein großer Befürworter nützlicher Verbesserungen - dh nicht nur Verbesserungen, die für Google funktionieren.) Unsere Website ist definitiv groß genug, um eine Geschwindigkeitssteigerung durch solche Verbesserungen zu spüren (und hat dies bereits getan).
Django Reinhardt

2
Die yslow Firebug-Erweiterung enthält jetzt einen Test für kleinere Standorte, der für die meisten Standorte viel realistischer ist.
John Conde

1
@Django Reinhardt - Ich habe meine Antwort umformuliert, es stimmt, dass viele der Vorschläge für jede Site gültig sind, aber insbesondere ETags sind umstritten, da in Y! 'S Fall die Funktion mit dem Lastausgleich in Konflikt steht
danlefree

Der von Ihnen bereitgestellte Link enthielt einen Link zur Beschreibung von ETags durch Yahoo ( developer.yahoo.com/performance/rules.html#etags ), der meine Fragen gut beantwortet. (Ja, es wäre wahrscheinlich besser für uns, ETags nicht zu bedienen.) Danke.
Django Reinhardt

1
@ Django: Wenn Sie mehrere Server haben, können ETags ein Problem sein. Solange jedoch dieselbe Datei immer denselben ETag zurückgibt, ist dies vollkommen in Ordnung. Siehe auch: webmasters.stackexchange.com/questions/1459/...
DisgruntledGoat
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.