Cloudflare gab bekannt, die Unterstützung für den HTTP-Antwortheader Vary innerhalb der Funktion Cache Rules für alle seine Tarife bereitzustellen, darunter Free, Pro, Business und Enterprise. Die Erweiterung gibt Website-Administratoren mehr Kontrolle darüber, wie das Netzwerk mit Anfragen umgeht, die zu mehreren Darstellungen derselben Ressource führen können, etwa aufgrund unterschiedlicher Sprachen, Bildformate, Inhaltstypen oder Komprimierungsarten.
Der Ursprungsserver legt über Vary die Anfrage-Header fest, die die Antwort beeinflussen können. Der Header gibt jedoch nicht an, ob alle textlichen Unterschiede zwischen den Werten dieser Header tatsächlich zu einer unterschiedlichen Antwort führen. Daher kann das Caching-System ähnliche Werte als eigenständige Versionen behandeln, wodurch der Inhalt in eine große Zahl von Elementen mit geringer Wiederverwendbarkeit aufgeteilt wird.
Drei Ansätze für den Umgang mit Abweichungen
Cloudflare bietet für jeden vom Ursprung in Vary genannten Header eine von drei Aktionen an:
- normalize: Normalisierung der Werte vor der Auswahl der gespeicherten Version. Dies ist die empfohlene Option für Verhandlungs-Header wie Accept, Accept-Language und Accept-Encoding, wenn viele Werte auf eine begrenzte Zahl von Antworten abgebildet werden.
- passthrough: Verwendung des Rohwerts einschließlich Groß- und Kleinschreibung, Leerzeichen, Reihenfolge und doppelter Werte, wenn der genaue Unterschied die Antwort beeinflusst.
- bypass: Die Antwort wird nicht gespeichert, wenn der in Vary genannte Header personenbezogen oder sehr vielfältig ist, etwa Cookie oder User-Agent.
Vary: * führt immer zur Umgehung des Caches, da jeder Teil der Anfrage, einschließlich Informationen außerhalb der HTTP-Nachricht wie der IP-Adresse, die Auswahl der Antwort durch den Ursprung beeinflussen kann.
Was ändert sich in der Praxis?
Bei Verwendung der Normalisierung können sich formal unterschiedliche Anfragen, die dasselbe Ergebnis bevorzugen, dieselbe gespeicherte Version teilen. Cloudflare reduziert die Werte von Accept, Accept-Language und Accept-Encoding auf ein einheitliches Format, wandelt die Werte in Kleinbuchstaben um und ordnet sie nach der Qualitätspriorität; bei Gleichstand erfolgt die Sortierung alphabetisch. Außerdem kann der Administrator unterstützte Medientypen oder Sprachen festlegen, etwa text/html und application/json oder en, fr und de.
Dieses Verhalten kann jedoch Unterschiede beseitigen, die der Ursprung benötigt. Cloudflare weist darauf hin, dass q=0-Werte oder bestimmte Sprachausnahmen während der Kürzung verloren gehen können. Daher sollte passthrough verwendet werden, wenn der Ursprung diese Ausschlüsse so sehen muss, wie sie vom Client gesendet wurden. Auch die Weitergabe der Rohwerte kann das Problem der Fragmentierung wieder hervorbringen: Werte wie compact,full und compact, full können zu unterschiedlichen Cache-Schlüsseln führen, selbst wenn der Ursprung sie als gleichwertig behandelt.
Verantwortung des Ursprungs und Grenzen der Aktualisierung
Der Ursprung muss Vary bei jeder speicherbaren Antwort konsistent zurückgeben, die je nach Anfrage-Header unterschiedlich ausfallen kann, einschließlich Fallback-Antworten und Fehlern. Wenn eine der Antworten den passenden Header nicht enthält, kann Cloudflare diese Antwort ohne die erforderliche Trennung speichern.
Eine Änderung der Vary-Einstellungen löscht vorhandene Inhalte nicht automatisch. Alte Einträge können bestehen bleiben, bis sie ablaufen oder ein Purge-Vorgang ausgeführt wird. Außerdem ersetzt die Vary-Konfiguration nicht in jedem Fall einen benutzerdefinierten Cache-Schlüssel: Cloudflare empfiehlt, den benutzerdefinierten Schlüssel zu verwenden, wenn eine Anforderungseigenschaft ein fester Bestandteil der Ressourcenidentität ist, und Vary zu verwenden, wenn der Ursprung in der Antwort die Felder angibt, die sie tatsächlich beeinflussen.
Warum ist diese Nachricht wichtig?
Die Aktualisierung behandelt einen praktischen Zielkonflikt in CDN-Netzwerken: Das Ignorieren von Vary kann dem Client das falsche Format oder die falsche Sprache senden, während die wörtliche Behandlung jedes Werts die Cache-Trefferquote senken und die Zahl der Anfragen an den Ursprung erhöhen kann. Laut dem Artikel zeigte eine Analyse von mehr als 120 Millionen Antworten von etwa 50.000 beliebten Websites, dass nahezu 3.000 Websites die Abweichung über vier oder mehr Felder verwenden, einige davon über 10, 23 oder 47 Felder.
Der Nutzen hängt weiterhin von der Qualität ab, mit der der Ursprung die von ihm bereitgestellten Darstellungen definiert, sowie von der Wahl der passenden Aktion für jeden Header. Die Einstellungen sind über das Cloudflare-Dashboard, die Rulesets API oder Terraform verfügbar. Dabei müssen die unterschiedlichen Werte getestet und CF-Cache-Status nach der Veröffentlichung überwacht werden.