Frage

Was ist eine gute Methode der programmatisch etag für Web-Seiten zu erzeugen und diese Praxis wird empfohlen? Einige Websites empfehlen Wende ETags ab, andere empfehlen, sie von Hand produzieren und einige empfehlen die Standardeinstellungen zu verlassen aktiv - was ist der beste Weg, hier

War es hilfreich?

Lösung

ETags Hilfe tun, wenn Sie irgendeine Art von Caching-Mechanismus vor Ihrem Website-Generator verwenden. Browser selbst nutzen sie nicht, sie hören „(if) geändert, da“ oder „Alter“ header structs, afaik.

Wie auch immer, aufgrund seiner einfachen Natur ist es kein Problem, einen http-Header mit einem ETag bereitzustellen. Ich habe gehört, dass viele Web-Server einfach den Speicherort der Datei übernehmen und den Zeitstempel der Datei und machen Sie einen md5-Hash über diese Daten.

Wir, als ein Beispiel, bauten einen einfachen, aber effektiven etag mit unserer Software. Jede „Content-Einheit“ (dh html, JPEGs, GIFs ...) in unserer Software hat eine eindeutige ID und eine Versionsnummer (dh ein jpeg hat die ID „17“ und die Version „2“, das bedeutet, es wurde einmal geändert) . So ist der ETag einfach die Zeichenfolge "id-Version", hier: "17-2". Bei der nächsten Änderung wäre es „17-3“, so dass die Cacher die Änderung erkennt, lädt das neue Inhaltsteil (einmal) vollständig und speichert sie in einem eigenen Cache.

Aber Sie könnten wahrscheinlich die URL verwenden und einen Zeitstempel (das heißt der Zeitstempel der Datei), zu.

Andere Tipps

Ich empfehle, einen Hash-Wert des den Inhalt zu erzeugen, z.B. md5($content).
Zusätzlich Hash-Kollision zu verhindern, können Sie beispielsweise hinzufügen die ID des Inhaltselement, um es (wenn dies angemessen ist).

Nun ETags Sinn machen, wenn Sie sich stark auf Caching verlassen. Sie sind ein großer Indikator für den Zustand einer Ressource (zum Beispiel einer URL).

Zum Beispiel, sagen wir mal Sie verwenden Ajax Anfrage die neuesten Kommentare eines Benutzers zu ziehen und Sie wollen wissen, ob es neue Kommentare sind. Ändern des ETag auf alert Ihre Anwendung von neuen Inhalten ist eine weniger teure Art und Weise auf, dass zu überprüfen.

Denn wenn der ETag gleich ist, können Sie Ihren Cache halten, aber sonst ist es wieder aufzubauen.

ETags auch sehr viel Sinn mit RESTful APIs machen.

Wie es zu erzeugen, bei der spec , ich glaube, Sie fast alles tun können, die Sie wollen. Ein Zeitstempel, ein Hash, was auch immer für Sie Sinn / Ihre Anwendung macht.

Ich feuerte nur YSlow und es beschwerten sich über Etags, so habe ich ein wenig Forschung. Die Frage, wie pro dem Yahoo Blog (siehe Kommentare auch) ist, dass der Standard ETags Implementierungen verwendet die Datei Inode-Nummer oder NTFS-Revisionsnummer oder anderen soemthing gleichermaßen Server Specific als Teil des Hash. Dies, während schnell zu sein, verhindert grundsätzlich die gleiche Datei von von 2 verschiedenen Servern bedient werden, um den gleichen etag und mit Schrauben auf beiden Browsern und Downstream-Caches oder Lastausgleich.

Der bisherige Vorschlag ein MD5-Hash ist gut zu verwenden, obwohl Sie das verhindern haben ein Performance-Problem an und für sich davor. Die Umsetzung dieser Vorschläge bleibt den Leser, wenn auch off-Hand scheint es mir, wie dies die Art der Sache ist, dass Ihr Rahmen für Sie zu handhaben könnte fähig sein.

Für mich, da ich in einer einfachen Umgebung bin, wo die Datei Zeitstempel mehr als ausreichend sein werden, drehte ich mich nur um sie in Apache off mit FileETag none in meiner .htaccess-Datei. Dies hält den Mund YSlow und soll die Dinge fallen auf das Datum der letzte Änderung an der Datei vornehmen zurück.

Im Allgemeinen ist die „Sites“, die ihre Verwendung entmutigen ist Yahoo, und das ist, weil einiger Standard-Web-Server nicht automatisch ETAGs zu schaffen, die in Server-Farmen arbeiten. (Was ist richtig und genau von Yahoo zu erreichen.)

Aber, wenn Sie einen einzelnen Web-Server haben, als du bist in Ordnung. Wenn nicht, werden Sie wollen prüfen, wie Sie Ihren Web-Server verarbeitet diese und entsprechend handeln.

Mufasa,

Yahoo (und YSlow) tatsächlich ihre Verwendung fördern, aber mit dem Vorbehalt, die automatisch generierten ETags von Server zu Server unterscheiden.

Ich kann noch nicht stimmen, so werde ich nur sagen, dass ich mit dem Vorschlag eines Hash des Dateipfad und Zeitstempel (oder den Tabellennamen + primären Feldwert + Zeitstempel, wenn durch db Inhalt dargestellt werden) übereinstimmen.

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