Frage

Ich habe ein Buch gelesen und ich habe eine bestimmte Frage über das ETag Kapitel. Der Autor sagt, dass ETags Leistung schaden könnte, und dass Sie müssen sie stimmen fein oder deaktivieren sie vollständig.

Ich weiß schon, was ETags ist und die Risiken verstehen, aber es ist so schwer ETags richtig zu machen?

Ich habe gerade eine Anwendung, die einen ETag, dessen Wert der MD5-Hash des Antworttext sendet. Dies ist eine einfache Lösung, einfach in vielen Sprachen zu erreichen.

  • Wird mit MD5-Hash des Antworttext als ETag falsch? Wenn ja, warum?

  • Warum der Autor (der mich offensichtlich durch viele Größenordnung trickst) schlägt nicht eine so einfache Lösung?

Diese letzte Frage ist schwer zu beantworten, wenn Sie der Autor :) ist, so versuche ich, die Schwachstellen mit einem MD5-Hash als ETag zu finden.

War es hilfreich?

Lösung

ist ETag ähnlich die Last-Modified-Header. Es ist ein Mechanismus, um zu bestimmen Änderung durch die Kunden.

Argumentieren, ein ETag, dass das passiert einfach das Datum der letzten Änderung (das heißt der gleiche Text) werden, um alle erforderlichen Kriterien für einen ETag erfüllt. Es muss lediglich ein eindeutiger Wert sein, den Zustand einer Ressource darstellt. Nicht einzigartig in der gesamten Domäne von Ressourcen, einfach innerhalb der Ressource.

Nun, technisch gesehen, ein ETag hat "unendlich" Auflösung im Vergleich zu einem Last-Modified-Header. Last-Modified ändert sich nur bei einer Granularität von 1 Sekunde, während ein ETag können kleine Sekunde sein.

Sie können beide implementieren ETag und Last-Modified oder einfach das eine oder andere (oder keine, natürlich). Wenn Sie Last-Modified ist nicht ausreichend, dann einen ETag betrachten.

Geist, würde ich nicht ETag für „every“ Ressource festgelegt. Grundsätzlich würde ich setze es nicht für alles, was nicht zu erwarten ist, zwischengespeichert (dynamische Inhalte vor allem) hat. Es gibt keinen Punkt in diesem Fall nur verschwendete Arbeit.

Edit:. Ich sehe deine bearbeiten und klären

MD5 ist in Ordnung. Der einzige Nachteil ist die Berechnung MD5 die ganze Zeit. Ausführen von MD5 auf, sagen wir, eine 200K PDF-Datei, ist teuer. Ausführen von MD5 auf eine Ressource, die keine Erwartung des Seins gecached hat, ist einfach verschwenderisch (das heißt dynamische Inhalte).

Der Trick ist einfach, dass, was auch immer Mechanismus Sie verwenden, ist es so billig sein sollte als Last-Modified typisch ist. Last-Modified ist, wieder, in der Regel, eine Eigenschaft der Ressource, und in der Regel sehr günstig zu erreichen.

ETags sollte ähnlich billig sein. Wenn Sie MD5 verwenden, und Sie können die Verbindung zwischen der Ressource und dem MD5-Hash-Cache / speichern, dann ist das eine feine Lösung. Um jedoch die MD5 jedes Mal neu berechnet notwendig der ETag ist, ist grundsätzlich gegen die Idee von ETags mit Gesamtleistung des Servers zu verbessern.

Andere Tipps

Wir etags für unsere dynamische Inhalte in instela verwendet wird.

Unsere Strategie ist am Ende der Ausgabe des MD5-Hash des Inhalts zu erzeugen senden und wenn die if-None-Match-Header vorhanden ist, vergleichen wir den Header mit dem erzeugten Hash. Wenn die beiden Werte gleich sind senden wir 304-Code und interrumpt Antrag ohne jeden Inhalt zurück.

Es ist wahr, dass wir ein wenig CPU-Hash den Inhalt verbrauchen, aber schließlich sind wir viel Bandbreite zu sparen.

Wir haben eine Facebook-Newsfeed Stil Haupt-Seite, die für jeden Anwender unterschiedliche Inhalte hat. Da das Newsfeed-Gehalt nur 3-4 Mal pro Stunde ändert, sind die Haupt-Seite aktualisiert wird für die Clientseite so effizient. In der mobilen Ära denke ich, es ist besser, ein bisschen mehr CPU-Zeit zu verbringen, als Bandbreite zu verbringen. Die Bandbreite ist immer noch teurer als die CPU, und es ist eine bessere Erfahrung für die Kunden.

Nachdem das Buch nicht gelesen, ich kann sprechen nicht auf dem genauen Anliegen des Autors.

Allerdings sollte die Erzeugung von ETags so beschaffen sein, dass ein ETag nur einmal erzeugt wird, wenn eine Seite geändert hat. Erzeugen einer Hash-MD5 einer Webseite Kosten Verarbeitungsleistung und Zeit auf dem Server; wenn Sie viele Clients eine Verbindung haben, könnte es zu verursachen Performance-Probleme beginnen.

So müssen Sie eine gute Technik zum Erzeugen von ETags nur , wenn notwendig, und das Caching auf dem Server, bis die zugehörige Seite ändert.

Ich denke, die perceived problem mit ETags ist wahrscheinlich, dass Ihr Browser Problem hat und analysiert ein (einfache und klein) Request / Response für jede Ressource auf Ihrer Seite, wenn der ETAG-Wert zu überprüfen hat Serverseite geändert.

Ich persönlich finde diese zusätzliche kleinen Rundreisen auf den Server akzeptabel für häufig wechselnde Bilder, CSS, JavaScript (der Server muss nicht den Inhalt erneut zu senden, wenn der ETAG Browser aktuell ist), da der Mechanismus macht es ganz einfach zu Marke ‚aktualisiert 'Inhalt.

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