Frage

Ich habe mich umgesehen, konnte aber nicht herausfinden, ob ich sowohl einen ETag als auch einen ETag verwenden sollte Und ein Expires-Header oder Das Eine oder das Andere.

Ich versuche sicherzustellen, dass meine Flash-Dateien (und andere Bilder und was nicht) nur dann aktualisiert werden, wenn sich an diesen Dateien etwas ändert.

Ich möchte nichts Besonderes tun, wie zum Beispiel den Dateinamen ändern oder ein paar seltsame Zeichen am Ende der URL einfügen, damit sie nicht zwischengespeichert wird.

Muss ich außerdem irgendetwas programmgesteuert in meinen PHP-Skripten tun, um dies zu unterstützen, oder ist alles Apache?

War es hilfreich?

Lösung

Sie sind etwas anders - das ETag keine Informationen haben, dass der Client ermitteln können, ob eine Anforderung für diese Datei wieder in der Zukunft zu machen. Wenn ETag alles hat, muss es immer eine Anfrage. Wenn jedoch der Server die ETag von der Client-Anforderung liest, kann der Server dann bestimmen, ob die Datei (HTTP 200) oder sagen Sie den Client schicken, um nur ihre lokale Kopie (HTTP 304) zu verwenden. Ein ETag ist im Grunde nur eine Prüfsumme für eine Datei, die, wenn der Inhalt der Datei ändert semantisch ändert.

Die Expires-Header wird vom Client (und Proxies / Caches), um zu bestimmen, ob es noch braucht, um eine Anfrage an den Server überhaupt verwendet. Je näher Sie an das Datum Ablaufdatum ist, desto wahrscheinlicher ist es der Client (oder Proxy) wird eine HTTP-Anforderung von dem Server für diese Datei machen.

wirklich Also, was Sie tun möchten, ist es, beide Header verwenden - stellen Sie die Expires-Header auf einen vernünftigen Wert auf, wie oft der Inhalt ändert. Dann ETags konfiguriert gesendet werden, so dass, wenn Kunden eine Anfrage an den Server senden tun, kann es leichter bestimmen, ob die Datei zurück zu senden.

Eine letzte Anmerkung über ETag - wenn Sie einen Lastenausgleich Server-Konfiguration mit mehreren Maschinen ausgeführt Apache verwendet, wird Sie wahrscheinlich ETag Generation deaktivieren möchten. Dies liegt daran, Inodes als Teil des ETag Hash-Algorithmus verwendet werden, die zwischen den Servern unterschiedlich sein werden. Sie können Apache so konfigurieren, dass nicht Inodes als Teil der Berechnung zu verwenden, aber dann würden Sie die Zeitstempel der Dateien sicherstellen möchten, sind genau die gleichen, die gleichen ETag für alle Server generiert, um sicherzustellen, wird.

Andere Tipps

Etag Und Zuletzt bearbeitet Header sind Validatoren.

Sie helfen dem Browser und/oder dem Cache (Reverse-Proxy), zu erkennen, ob sich eine Datei/Seite geändert hat, auch wenn sie denselben Namen behält.

Läuft ab Und Cache-Kontrolle geben Informationen aktualisieren.

Dies bedeutet, dass sie dem Browser und den umgekehrten Proxys mitteilen, bis zu welchem ​​Zeitpunkt oder wie lange sie die Seite/Datei in ihrem Cache behalten dürfen.

Die Frage ist also normalerweise, welcher Validator verwendet werden soll, Etag oder Last-Modified, und welcher Refresh-Informationsheader verwendet werden soll, Expires oder Cache-Control.

Expires und Cache-Control sind "starke Caching-Header"

Last-Modified und ETag sind "schwache Caching-Header"

Zuerst wird der Browsercheck Expires/Cache-Control, um zu bestimmen, ob eine Anfrage an den Server machen

Wenn Sie eine Anfrage machen müssen, wird es Last-Modified/ETag in der HTTP-Anforderung senden. Wenn der Etag Wert des Dokuments, das übereinstimmt, wird der Server einen 304-Code anstelle von 200, und keinen Inhalt senden. Der Browser wird der Inhalt aus dem Cache geladen werden.

Standardmäßig wird Apache einen Etag erzeugt basierend auf die Inode-Nummer der Datei, Datum der letzten Änderung und die Größe, die völlig in Ordnung sein sollte, tun, was Sie wollen. Ich denke, es wird auch standardmäßig ein Last-Modified-Header auf der Grundlage der letzten Änderung der Datei auf der Festplatte erzeugen, die auch völlig in Ordnung ist, zu tun, was Sie wollen.

Sie sollten wahrscheinlich auch Apache haben senden Verfällt ein Kopf datierte ein Jahr lang in der Zukunft (nach http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21 ), so dass Browser kennen den Inhalt zwischenspeicherbar ist. Hier finden Sie aktuelle mod_expires dass konfigurieren.

Eine weitere Zusammenfassung:

Sie müssen beide verwenden. ETags sind eine „Server-Seite“ Informationen. Verfällt ist ein "Client-Seite" Caching.

  • Mit ETags , außer wenn Sie einen Lastenausgleich Server. Sie sind sicher und lassen Kunden wissen, dass sie neue Versionen der Server-Dateien können Sie jedes Mal etwas ändern auf Ihrer Seite bekommen sollte.

  • Gültig bis muß mit Vorsicht verwendet werden, als ob Sie ein Verfallsdatum weit in der Zukunft wollen aber immediatelly eine der Dateien ändern (eine JS-Datei zum Beispiel), einige Benutzer kann nicht die geänderte Version, bis eine lange Zeit!

Eine weitere Sache Ich mag wäre zu erwähnen, dass einige der Antworten verpaßt haben ist der Nachteil, sowohl ETags und Expires/Cache-control in Ihrem Header zu haben.

Je nach Bedarf kann es nur zusätzliches Bytes in Ihrem Header hinzufügen, welche Pakete erhöhen kann, die mehr TCP-Overhead bedeutet. Auch hier sollen Sie notwendig in Ihrem Header sehen, ob der Kopf beiden Dinge zu haben, ist oder wird es nur zusätzliches Gewicht in Ihren Anforderungen hinzufügen, die Leistung reduziert wird.

Sie können mehr über sie zu dieser ausgezeichneten Blog-Post von Kyle Simpson lesen: http://calendar.perfplanet.com/2010/bloated-request-response-headers/

Aus meiner Sicht mit Überschrift- Ablaufen, Server kann dem Client sagen, wenn meine Daten abgestanden sein würden, während mit Etag, Server des etag Wert für die Kunden überprüfen würde‘jede Anforderung.

ETag wird verwendet, um zu bestimmen, ob eine Ressource die Kopie eines verwenden soll. und Expires Header wie Cache-Control wird der Client gesagt, dass vor den Cache Jahrzehnten Client sollte die lokale Ressource holen.

In der modernen Websites sind Dort bietet oft eine Datei Hash-Namen, wie app.98a3cf23.js, so dass es eine gute Praxis zu bedienen Expires-Header. Außerdem reduzieren sie auch die Kosten für Netzwerk.

Hoffe, es hilft;)

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