Korrigieren Sie mich, wenn ich falsch liege, und ich weiß, dass dies ein alter Beitrag ist - aber ich möchte für neue Passanten einen Kommentar abgeben. Ich glaube, ein Reverse Proxy-Cache hilft nicht so viel, wie Sie möchten, wenn Sie ETags verwenden.
Validierungs-Caching-Mechanismen verwenden den Ursprungsserver, um zu überprüfen, ob das ETag (oder das Datum der letzten Änderung) in der Anforderung noch gültig ist (mit dem Ressourcen-Etag übereinstimmt oder nicht übereinstimmt, je nachdem, welcher Header verwendet wird oder geändert wurde / wurde seit dem auf Anfrage angegebenen Datum).
Dies bedeutet, dass ein Reverse-Proxy-Cache wie Varnish diese Anforderung weiterhin an den Ursprungsserver weiterleitet. Möglicherweise antwortet es mit der Anfrage, anstatt dass der Server sie bearbeitet, aber Sie haben den Roundtrip zum Ursprungsserver nicht gespeichert.
Browser können in jedem Fall Antworten zwischenspeichern und eine 304-Antwort verarbeiten. Daher ist der private Cache des Benutzers möglicherweise besser dafür geeignet als die Verwendung eines Reverse-Proxys (YMMV, insbesondere im Maßstab, und natürlich abhängig von Ihrem Anwendungsfall. Ich nicht Annahmen über Ihre Apps treffen möchten).
Aus der Spezifikation 13.3 :
Wenn ein Cache einen veralteten Eintrag hat, den er als Antwort auf die Anfrage eines Clients verwenden möchte, muss er zuerst beim Ursprungsserver (oder möglicherweise bei einem Zwischencache mit einer neuen Antwort) prüfen, ob sein zwischengespeicherter Eintrag noch verwendbar ist . Wir nennen dies "Validieren" des Cache-Eintrags. Da wir nicht den Aufwand für die erneute Übertragung der vollständigen Antwort bezahlen müssen, wenn der zwischengespeicherte Eintrag gut ist, und wir den Aufwand für eine zusätzliche Hin- und Rückfahrt nicht bezahlen möchten, wenn der zwischengespeicherte Eintrag ungültig ist, unterstützt das HTTP / 1.1-Protokoll die Verwendung von bedingten Methoden.
und dann Anmerkung 13.3.4 :
Ein HTTP / 1.1-Caching-Proxy darf nach Erhalt einer bedingten Anforderung, die sowohl ein Datum der letzten Änderung als auch ein oder mehrere Entitäts-Tags als Cache-Validatoren enthält, KEINE lokal zwischengespeicherte Antwort an den Client zurückgeben, es sei denn, diese zwischengespeicherte Antwort stimmt mit allen überein Bedingte Header-Felder in der Anforderung.
So kann Varnish eine Antwort für Sie zurückgeben, aber Sie haben immer noch einen Roundtrip zum Server. Wenn Sie einen App-Cache wie APC oder Memcache verwenden können, lohnt sich das möglicherweise noch für Sie. Das Validierungs-Caching ist jedoch im Allgemeinen besser für Bandbreiteneinsparungen als für Serverressourceneinsparungen.
Das Zwischenspeichern der Validierung kann am besten dem Client (Browser oder API-Code) überlassen werden.
Bei Verwendung des Ablaufmodells für das Caching leuchtet ein Reverse-Proxy-Cache wirklich. Auf diese Weise können Sie das Schlagen des Ursprungsservers insgesamt überspringen. Mit Expires
, Cache-Control
, Date
usw, ist die beste (wieder, IMO) Mechanismus für einen Reverse - Proxy - Cache als Cache kann die Antwort zurück, es ist nicht abgestanden vorausgesetzt, ohne jemals aus dem Ursprungsserver zu schlagen.