Zusammenfassung

  • HTTP Vary nennt Anfragefelder, die die Auswahl der Repräsentation durch den Ursprung beeinflusst haben könnten; vor einer Wiederverwendung ohne Validierung muss ein Cache diese Felder abgleichen.
  • Das Feld bestätigt weder die tatsächlich eingesetzte Schlüsselkonfiguration noch sämtliche Auswahlkriterien der Anwendung, Mandanten- oder Berechtigungsgrenzen oder den Hash der wirklich ausgelieferten Repräsentation.

Nehmen wir eine fiktive Plattform, die mandantenspezifische Konfiguration unter einem gemeinsamen URI bereitstellt. Mandant A ruft die Ressource ab, der Ursprung liefert dessen Markenauftritt und Vary: Accept-Encoding. Ein Kontrollsystem sieht das gültige Vary-Feld und bewertet die Cache-Isolierung als erfüllt. Später verwendet Mandant B dieselbe Komprimierungspräferenz und erhält am Rand die Bytes von A.

Vary hat in diesem Ablauf nicht versagt. Es beschrieb die Dimension, die der Ursprung für diese Antwort angegeben hatte. Der Fehler lag darin, diese begrenzte Erklärung als Beleg für eine umfassendere Grenze zu behandeln, die sie nie zertifizieren sollte.

Was Vary tatsächlich aussagt

RFC 9110 definiert Vary als Antwortfeld, das angibt, welche Teile der Anfrage außer Methode und Ziel-URI die Auswahl des Antwortinhalts durch den Ursprungsserver beeinflusst haben könnten. Enthält der Wert Feldnamen, sind dies die Auswahlfelder. Es handelt sich um eine Erklärung des Ursprungs über mögliche Eingaben für genau diese Antwort.

Das Feld erfüllt zwei Zwecke. Es warnt Caches davor, die Antwort für eine spätere Anfrage wiederzuverwenden, wenn die genannten Felder nicht übereinstimmen, sofern der Ursprung die Wiederverwendung nicht validiert. Zudem informiert es den Benutzeragenten über eine Inhaltsaushandlung und darüber, dass andere Werte zu einer anderen Repräsentation führen könnten. Keiner der beiden Zwecke macht Vary zu Telemetrie des Caches, der später speichert oder ausliefert.

Der Platzhalter verdeutlicht die Grenze. Vary: * besagt, dass auch andere Aspekte, möglicherweise die Netzwerkadresse des Clients, eine Rolle gespielt haben könnten. Der Empfänger kann die Eignung für eine spätere Anfrage nicht allein aus deren Feldern bestimmen und muss sie an den Ursprung weiterleiten. Ein Proxy darf den Platzhalter nicht erzeugen. Er erklärt Unbestimmtheit und ist kein universeller Isolierungsschalter.

Der tatsächliche Cache-Schlüssel ist eine andere Tatsache

RFC 9111 bezeichnet als Cache-Schlüssel die Informationen, mit denen ein Cache eine gespeicherte Antwort auswählt. Mindestens gehören Methode und Ziel-URI dazu. Der Cache kann von Vary genannte Felder und weiteres Material hinzufügen.

Trägt eine gespeicherte Antwort Vary, darf der Cache sie ohne Validierung nur verwenden, wenn alle genannten Anfragefelder mit der ursprünglichen Anfrage übereinstimmen. Normalisierung ist nur erlaubt, wenn die Semantik des Feldes erhalten bleibt. War ein genanntes Feld nicht vorhanden, passt es nur zu erneutem Fehlen. Eine gespeicherte Antwort mit Vary: * passt nie.

Das sind starke Regeln. Sie beantworten dennoch nicht vier Betriebsfragen: Hat der eingesetzte Cache das Feld wirklich verarbeitet? Hat ein Vermittler es entfernt oder verändert? Wählte die Anwendung anhand eines nicht genannten Kriteriums, etwa eines erst nach der Authentifizierung aufgelösten Mandantenkontexts? Entsprach das ausgelieferte Objekt der Variante, die der Cache ausgewählt zu haben glaubte? Vary ist dafür relevante Evidenz, aber nicht die vollständige Antwort.

Isolierung kann von unsichtbaren Dimensionen abhängen

Anwendungen wählen Inhalte nach authentifiziertem Konto, Mandantenzuordnung, Funktionskohorte, Richtlinienstand, Rechtsraum oder Edge-Konfiguration. Manche Fakten erscheinen in Anfragefeldern, andere stammen aus serverseitigem Zustand. Für Faktoren außerhalb der Nachricht erlaubt RFC 9110 Vary: *; dies verhindert die gewöhnliche Wiederverwendung, statt eine wiederverwendbare private Partition zu beschreiben.

Die bloße Existenz von Vary oder eine Liste nur aus Sprache und Kodierung beweist daher keine Mandantentrennung. Ein syntaktisch korrektes Feld kann gegenüber der echten Anwendungslogik unvollständig sein. Umgekehrt kann ein Cache eine zusätzliche Datenschutzpartition verwenden, die in Vary nicht sichtbar ist. Die Antwort allein zeigt weder das eine noch das andere.

Auch Aktualität ist eine andere Frage. Eine frische Variante kann wegen einer fehlenden Schlüsseldimension falsch sein. Eine veraltete Variante kann in der richtigen Partition liegen. Eine Validierung kann die weitere Verwendbarkeit einer Repräsentation bestätigen, ohne die Zuordnung zum richtigen Mandanten zu beweisen. Aktualität, Validierung, Autorisierung und Variantenauswahl sind verbundene, aber eigenständige Kontrollen.

Evidenz für eine belastbare Aussage

Wer behauptet, eine Bereitstellung habe Repräsentationen isoliert, muss Protokollerklärung und tatsächliche Cache-Aktion verbinden. Zu erfassen sind Cache-Instanz oder Kohorte und Konfigurationsversion, Methode und URI, der tatsächlich empfangene Vary-Wert, normalisierte Werte und Abwesenheit jedes Auswahlfelds, sämtliche Anwendungsdimensionen, Mandanten- und Berechtigungskontext, Cache-Treffer, Cache-Miss oder Revalidierungsentscheidung, Kennung des gespeicherten Objekts und Hash der ausgelieferten Bytes.

Der hier vorgeschlagene Variantenauswahlbeleg ist eine redaktionelle Evidenzsynthese und kein vom IETF definiertes Protokollelement. Er soll verhindern, dass ein enges Standardsignal zu einer breiten Betriebsgarantie aufgewertet wird. Auch der Beobachtungspunkt gehört dazu, weil Ursprung, Zwischen-Cache und Edge verschiedene Felder sehen und verschiedene Konfigurationen anwenden können.

Vary bleibt nützlich, wenn seine Reichweite respektiert wird. Es macht deklarierte Inhaltsaushandlung sichtbar und gibt konformen Caches klare Vergleichspflichten. Der Fehler beginnt, wenn diese Erklärung als Beweis für Umsetzung, Isolierung oder Ergebnis gilt. Ein Header kann beabsichtigte Auswahlachsen nennen; nur verbundene Konfigurations- und Auslieferungsevidenz zeigt, dass die richtige Repräsentation auf der richtigen Seite der Grenze blieb.

Quellen