373 Stimmen

ETag vs. Header Expires

Ich habe mich umgesehen, konnte aber nicht herausfinden, ob ich sowohl einen ETag y eine Expires-Kopfzeile oder das eine oder das andere.

Ich möchte sicherstellen, dass meine Flash-Dateien (und andere Bilder usw.) nur dann aktualisiert werden, wenn es eine Änderung an diesen Dateien gibt.

Ich möchte nichts Besonderes tun, wie z. B. den Dateinamen ändern oder einige seltsame Zeichen an das Ende der URL anhängen, damit sie nicht zwischengespeichert wird.

Gibt es irgendetwas, das ich auf meiner Seite in meinen PHP-Skripten programmatisch tun muss, um dies zu unterstützen, oder ist das alles Apache?

695voto

Marc Novakowski Punkte 43303

Sie unterscheiden sich geringfügig - der ETag enthält keine Informationen, anhand derer der Client feststellen kann, ob er in Zukunft erneut eine Anfrage nach dieser Datei stellen soll oder nicht. Wenn ETag alles ist, was er hat, wird er immer eine Anfrage stellen müssen. Wenn der Server jedoch den ETag aus der Client-Anfrage liest, kann er entscheiden, ob er die Datei sendet (HTTP 200) oder dem Client mitteilt, dass er nur seine lokale Kopie verwenden soll (HTTP 304). Ein ETag ist im Grunde nur eine Prüfsumme für eine Datei, die sich semantisch ändert, wenn sich der Inhalt der Datei ändert.

Der Expires-Header wird vom Client (und von Proxies/Caches) verwendet, um festzustellen, ob er überhaupt eine Anfrage an den Server stellen muss oder nicht. Je näher Sie dem Expires-Datum sind, desto wahrscheinlicher ist es, dass der Client (oder Proxy) eine HTTP-Anfrage für diese Datei vom Server stellt.

Sie sollten also wirklich BEIDE Header verwenden - setzen Sie den Expires-Header auf einen vernünftigen Wert, je nachdem, wie oft sich der Inhalt ändert. Konfigurieren Sie dann ETags, die gesendet werden sollen, damit der Server bei Anfragen von Clients leichter feststellen kann, ob er die Datei zurücksenden soll oder nicht.

Ein letzter Hinweis zu ETag: Wenn Sie einen Server mit Lastverteilung auf mehreren Rechnern verwenden, auf denen Apache läuft, sollten Sie die ETag-Generierung deaktivieren. Dies liegt daran, dass Inodes als Teil des ETag-Hash-Algorithmus verwendet werden, der von Server zu Server unterschiedlich sein wird. Sie können Apache so konfigurieren, dass Inodes nicht als Teil der Berechnung verwendet werden, aber dann sollten Sie sicherstellen, dass die Zeitstempel der Dateien exakt gleich sind, um sicherzustellen, dass auf allen Servern der gleiche ETag generiert wird.

115voto

john Punkte 1334

Etag y Zuletzt geändert Kopfzeilen sind Prüfer .

Sie helfen dem Browser und/oder dem Cache (Reverse Proxy) zu verstehen, ob sich eine Datei/Seite geändert hat, auch wenn sie den gleichen Namen trägt.

Abgelaufen y Cache-Kontrolle geben Informationen aktualisieren .

Das bedeutet, dass sie den Browser und die zwischengeschalteten Proxys darüber informieren, bis zu welchem Zeitpunkt oder wie lange sie die Seite/Datei in ihrem Cache halten dürfen.

Die Frage ist also in der Regel, welcher Validator zu verwenden ist, etag oder last-modified, und welcher Refresh-Informationsheader zu verwenden ist, expires oder cache-control.

39voto

hienbt88 Punkte 1219

Expires y Cache-Control sind "starke Caching-Kopfzeilen".

Last-Modified y ETag sind "schwache Caching-Header".

Zunächst der Browser-Check Expires/Cache-Control um festzustellen, ob eine Anfrage an den Server gestellt werden soll oder nicht

Wenn Sie eine Anfrage stellen müssen, sendet es Last-Modified/ETag in der HTTP-Anfrage. Wenn die Etag Wert des Dokuments damit übereinstimmt, sendet der Server einen 304-Code statt 200 und keinen Inhalt. Der Browser lädt den Inhalt aus seinem Zwischenspeicher.

12voto

Benjamin Piette Punkte 3495

Eine weitere Zusammenfassung:

Sie müssen beides verwenden. ETags sind eine "serverseitige" Information. Expires sind ein "clientseitiges" Caching.

  • Utilice ETags es sei denn, Sie haben einen Server mit Lastausgleich. Sie sind sicher und teilen den Kunden mit, dass sie jedes Mal neue Versionen Ihrer Serverdateien erhalten sollten, wenn Sie etwas auf Ihrer Seite ändern.

  • Abgelaufen muss mit Vorsicht verwendet werden, denn wenn Sie ein weit in der Zukunft liegendes Ablaufdatum festlegen, aber eine der Dateien sofort ändern wollen (z. B. eine JS-Datei), erhalten einige Benutzer die geänderte Version möglicherweise erst nach langer Zeit!

1voto

aneagoie Punkte 23

Ein weiterer Punkt, den ich erwähnen möchte und den einige der Antworten vielleicht übersehen haben, ist der Nachteil, den beide haben ETags y Expires/Cache-control in Ihren Kopfzeilen.

Abhängig von Ihren Bedürfnissen können einfach zusätzliche Bytes in den Header eingefügt werden, was zu einer Vergrößerung der Pakete und damit zu mehr TCP-Overhead führen kann. Auch hier sollten Sie prüfen, ob der Overhead, der durch die beiden Dinge in den Headern entsteht, notwendig ist, oder ob er nur zusätzliches Gewicht in Ihre Anfragen bringt, was die Leistung verringert.

Mehr darüber erfahren Sie in diesem hervorragenden Blogbeitrag von Kyle Simpson: http://calendar.perfplanet.com/2010/bloated-request-response-headers/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X