Citrix ADC

Konfigurieren von Cookies, Kopfzeilen und Abfragen

In diesem Artikel wird erläutert, wie Cache-Managen von Cookies, HTTP-Headern und Ursprungsserverabfragen konfiguriert werden. Dazu gehört das Ändern des Standardverhaltens, das dazu führt, dass der Cache von dokumentierten Standards abweicht, das Überschreiben von HTTP-Headern, die dazu führen können, dass zwischengespeicherte Inhalte nicht im Cache gespeichert werden, und das Konfigurieren des Caches so, dass immer der Ursprung nach aktualisierten Inhalten abgefragt wird.

Abweichung des Cache-Verhaltens von den Standards

Standardmäßig entspricht der integrierte Cache den folgenden RFC-Standards:

  • RFC 2616, “HTTP HTTP/1.1”
  • Die in RFC 2617, HTTP Authentication: Basic and Digest Access Authentication beschriebenen Caching-Verhaltensweisen
  • Das in RFC 2965, HTTP State Management Mechanism beschriebene Caching-Verhalten

Die integrierten Richtlinien und die Standardinhaltsgruppenattribute gewährleisten die Konformität mit den meisten dieser Standards.

Das standardmäßige integrierte Cache-Verhalten weicht wie folgt von der Spezifikation ab:

  • Es gibt eine begrenzte Unterstützung für den Vary Header. Standardmäßig wird jede Antwort, die einen Vary Header enthält, als nicht zwischenspeicherbar angesehen, es sei denn, sie ist komprimiert. Eine komprimierte Antwort enthält Content-Encoding: gzip, content-encoding: deflate oder content-encoding: pack200-gzip und kann auch dann zwischengespeichert werden, wenn sie den Header Vary: Accept-encoding enthält.
  • Der integrierte Cache ignoriert die Werte der Header cache-control: no-cache und cache-control: private. Zum Beispiel wird eine Antwort, die cache-control enthält: no-cache=”set-cookie” wird behandelt, als ob die Antwort Cache-Control: no-cache enthielt. Standardmäßig wird die Antwort nicht zwischengespeichert.
  • Ein Bild (content-type = image/*) wird immer als zwischengespeichert betrachtet, auch wenn eine Bild-Antwort set-cookie oder set-cookie2 Header enthält oder wenn eine Bildanforderung einen Cookie-Header enthält. Der integrierte Cache entfernt set-cookie und set-cookie2 Header aus einer Antwort, bevor er sie zwischenspeichert. Dies weicht von RFC 2965 ab. Sie können das RFC-konforme Verhalten wie folgt konfigurieren:
add cache policy rfc_compliant_images_policy -rule "http.res.header.set-cookie2.exists || http.res.header.set-cookie.exists" -action NOCACHE


bind cache global rfc_compliant_images_policy -priority 100 -type REQ_OVERRIDE
  • Die folgenden Cache-Control-Header in einer Anforderung erzwingen einen RFC-kompatiblen Cache, eine zwischengespeicherte Antwort vom Ursprungsserver neu zu laden:

Cache-control: max-age=0

Cache-control: no-cache

Zum Schutz vor Denial-of-Service-Angriffen ist dieses Verhalten nicht der Standardwert.

  • Standardmäßig betrachtet das Caching-Modul eine Antwort als zwischengespeichert, es sei denn, ein Antwort-Header-Status anders. Um dieses Verhalten RFC 2616 konform-weakPosRelExpiry zu machen, legen Sie-weakNegResExpiry für alle Inhaltsgruppen 0 fest.

Cookies von einer Antwort entfernen

Cookies werden oft für einen Benutzer personalisiert und sollten normalerweise nicht zwischengespeichert werden. DerRemove Response Cookies Parameter entferntSet-Cookie and Set-Cookie2 Header, bevor eine Antwort zwischenspeichert. Standardmäßig verhindert dieRemove Response Cookies Option für eine Content-Gruppe das Zwischenspeichern von Antworten mitSet-Cookie oderSet-Cookie2 Headern.

Hinweis: Wenn Bilder zwischengespeichert werden, besteht das integrierte Verhalten darin, dieSet-Cookie HeaderSet-Cookie2 und vor dem Zwischenspeichern zu entfernen, unabhängig davon, wie die Content-Gruppe konfiguriert ist.

Citrix empfiehlt, dass Sie die StandardeinstellungRemove Response Cookies für jede Content-Gruppe übernehmen, in der eingebettete Antworten gespeichert werden, z. B. Bilder.

So konfigurieren SieRemove Response Cookies für eine Content-Gruppe über die Befehlszeile:

Geben Sie an der Eingabeaufforderung Folgendes ein:

set cache contentgroup <name> -removeCookies YES

Konfigurieren von Response-Cookies für eine Content-Gruppe mithilfe der Citrix ADC Benutzeroberfläche

  1. Navigieren Sie zu Optimierung > Integriertes Caching > Inhaltsgruppen, und wählen Sie die Content-Gruppe aus.
  2. Wählen Sie auf der Registerkarte Sonstiges in der Gruppe Einstellungen die Option Antwort-Cookies entfernen aus.

Einfügen von HTTP-Headern zur Antwortzeit

Der integrierte Cache kann HTTP-Header in Antworten einfügen, die aus Cache-Treffern resultieren. Die Citrix ADC Appliance ändert keine Header in Antworten, die aus Cache-Fehlern resultieren.

In der folgenden Tabelle werden Kopfzeilen beschrieben, die Sie in eine Antwort einfügen können.

Überschrift Spezifikation
Alter Gibt das Alter der Antwort in Sekunden an, berechnet aus dem Zeitpunkt, zu dem die Antwort auf dem Ursprungsserver generiert wurde. Standardmäßig fügt der Cache einen Age-Header für jede Antwort ein, die aus dem Cache bereitgestellt wird.
via Listet Protokolle und Empfänger zwischen den Start- und Endpunkten für eine Anforderung oder eine Antwort auf. Die Citrix ADC Appliance fügt in jede Antwort, die sie aus dem Cache ausführt, einen Va-Header ein. Der Standardwert des eingefügten Headers ist “NS-CACHE-9.2: letztes Oktett der Citrix ADC IP-Adresse”. Weitere Informationen finden Sie unter “Konfigurieren von globalen Attributen für Caching. “
ETag Der Cache unterstützt die Antwortvalidierung mit Last-Modified und ETag-Headern, um festzustellen, ob eine Antwort veraltet ist. Der Cache fügt nur dann ein ETag in eine Antwort ein, wenn er die Antwort zwischenspeichert und der Ursprungsserver keinen eigenen ETag-Header eingefügt hat. Der ETag-Wert ist eine beliebige eindeutige Zahl. Der ETag-Wert für eine Antwort ändert sich, wenn er vom Ursprungsserver aktualisiert wird. Er bleibt jedoch gleich, wenn der Server eine 304 (Objekt nicht aktualisiert) -Antwort sendet. Ursprungsserver generieren in der Regel keine Validatoren für dynamischen Inhalt, da dynamische Inhalte als nicht zwischenspeicherbar angesehen werden. Sie können dieses Verhalten überschreiben. Beim Einfügen von ETag-Header darf der Cache keine vollständigen Antworten liefern. Stattdessen muss der Benutzer-Agent die dynamische Antwort zwischenspeichern, die vom integrierten Cache beim ersten Mal gesendet wird. Um einen User Agent zu zwingen, eine Antwort zwischenzuspeichern, konfigurieren Sie den integrierten Cache so, dass er einen ETag-Header einfügt und den ursprünglich bereitgestellten Cache-Control-Header ersetzt.
Cache-Control Die Citrix ADC Appliance ändert normalerweise keine Cacheability-Header in Antworten, die vom Ursprungsserver bereitgestellt werden. Wenn der Ursprungsserver eine Antwort sendet, die als nicht zwischenspeicherbar gekennzeichnet ist, behandelt der Client die Antwort als nicht zwischenspeicherbar, selbst wenn die Citrix ADC Appliance die Antwort zwischenspeichert. Um dynamische Antworten in einem Benutzer-Agent zwischenzuspeichern, können Sie Cache-Control-Header vom Ursprungsserver ersetzen. Dies gilt nur für Benutzeragenten und andere zwischenliegende Caches. Sie haben keinen Einfluss auf den integrierten Cache.
Überschrift Spezifikation
Alter Gibt das Alter der Antwort in Sekunden an, berechnet aus dem Zeitpunkt, zu dem die Antwort auf dem Ursprungsserver generiert wurde. Standardmäßig fügt der Cache einen Age-Header für jede Antwort ein, die aus dem Cache bereitgestellt wird.
via Listet Protokolle und Empfänger zwischen den Start- und Endpunkten für eine Anforderung oder eine Antwort auf. Die Citrix ADC Appliance fügt in jede Antwort, die sie aus dem Cache ausführt, einen Va-Header ein. Der Standardwert des eingefügten Headers ist “NS-CACHE-9.2: letztes Oktett der Citrix ADC IP-Adresse”. Weitere Informationen finden Sie unter “Konfigurieren von globalen Attributen für Caching. “
ETag Der Cache unterstützt die Antwortvalidierung mit Last-Modified und ETag-Headern, um festzustellen, ob eine Antwort veraltet ist. Der Cache fügt nur dann ein ETag in eine Antwort ein, wenn er die Antwort zwischenspeichert und der Ursprungsserver keinen eigenen ETag-Header eingefügt hat. Der ETag-Wert ist eine beliebige eindeutige Zahl. Der ETag-Wert für eine Antwort ändert sich, wenn er vom Ursprungsserver aktualisiert wird. Er bleibt jedoch gleich, wenn der Server eine 304 (Objekt nicht aktualisiert) -Antwort sendet. Ursprungsserver generieren in der Regel keine Validatoren für dynamischen Inhalt, da dynamische Inhalte als nicht zwischenspeicherbar angesehen werden. Sie können dieses Verhalten überschreiben. Beim Einfügen von ETag-Header darf der Cache keine vollständigen Antworten liefern. Stattdessen muss der Benutzer-Agent die dynamische Antwort zwischenspeichern, die vom integrierten Cache beim ersten Mal gesendet wird. Um einen User Agent zu zwingen, eine Antwort zwischenzuspeichern, konfigurieren Sie den integrierten Cache so, dass er einen ETag-Header einfügt und den ursprünglich bereitgestellten Cache-Control-Header ersetzt.
Cache-Control Die Citrix ADC Appliance ändert normalerweise keine Cacheability-Header in Antworten, die vom Ursprungsserver bereitgestellt werden. Wenn der Ursprungsserver eine Antwort sendet, die als nicht zwischenspeicherbar gekennzeichnet ist, behandelt der Client die Antwort als nicht zwischenspeicherbar, selbst wenn die Citrix ADC Appliance die Antwort zwischenspeichert. Um dynamische Antworten in einem Benutzer-Agent zwischenzuspeichern, können Sie Cache-Control-Header vom Ursprungsserver ersetzen. Dies gilt nur für Benutzeragenten und andere zwischenliegende Caches. Sie haben keinen Einfluss auf den integrierten Cache.

Einfügen eines Alters-, Via- oder ETag-Headers

In den folgenden Verfahren wird beschrieben, wie Alters-, Via- und ETag-Header eingefügt werden.

Fügen Sie über die Citrix ADC Befehlszeile einen Age-, Via- oder ETag-Header ein:

Geben Sie an der Eingabeaufforderung Folgendes ein:

set cache contentgroup <name> -insertVia YES -insertAge YES -insertETag YES

Konfigurieren Sie den Header Alter, Via oder Etag über die Citrix ADC GUI

  1. Navigieren Sie zu Optimierung > Integriertes Caching > Inhaltsgruppen, und wählen Sie die Content-Gruppe aus.
  2. Wählen Sie auf der Registerkarte Sonstiges in der Gruppe HTTP-Header-Einfügungen je nach Bedarf die Optionen Via, Alter oder ETag aus.
  3. Die Werte für die anderen Header-Typen werden automatisch berechnet. Sie konfigurieren den Via -Wert in den Haupteinstellungen für den Cache.

    HTTP-Header-Einfügungen konfigurieren

Einfügen eines Cache-Control-Headers

Wenn der integrierte Cache einen vom Ursprungsserver eingefügten Cache-Control-Header ersetzt, ersetzt er auch den Expires-Header. Der neue Expires-Header enthält eine Ablaufzeit in der Vergangenheit. Dadurch wird sichergestellt, dass HTTP/1.0-Clients und Caches (die den Cache-Control-Header nicht verstehen) den Inhalt nicht zwischenspeichern.

Einfügen eines Cache-Control-Headers mithilfe der Citrix ADC Befehlsschnittstelle

Geben Sie an der Eingabeaufforderung Folgendes ein:

set cache contentgroup <name> -cacheControl <value>

Einfügen eines Cache-Control-Headers mithilfe der Citrix ADC Benutzeroberfläche

  1. Navigieren Sie zu Optimierung > Integriertes Caching > Content-Gruppenund
    1. Klicken Sie auf die Registerkarte Ablaufmethode, deaktivieren Sie die heuristischen und standardmäßigen Ablaufeinstellungen, und legen Sie den entsprechenden Wert im Textfeld Inhalt ablaufen nach fest.
    2. Klicken Sie auf Andere Registerkarte, und geben Sie die Kopfzeile, die Sie einfügen möchten, in das Textfeld Cache-Control ein. Alternativ können Sie auf Konfigurieren klicken, um die Cache-Control-Direktiven in zwischengespeicherten Antworten festzulegen.

Cache-Control- und Pragma-Header in Anforderungen ignorieren

Standardmäßig verarbeitet das Caching-Modul Cache-Control- und Pragma-Header. Die folgenden Token in Cache-Control-Headern werden wie in RFC 2616 beschrieben verarbeitet.

  • max-age
  • max-stale
  • only-if-cached
  • no-cache

Ein Pragma: no-cache-Header in einer Anfrage wird auf die gleiche Weise wie ein Cache-Control: no-cache-Header behandelt.

Wenn Sie das Cache-Modul so konfigurieren, dass Cache-Control und Pragma-Header ignoriert werden, führt eine Anforderung mit einem Cache-Control: No-Cache Header dazu, dass die Citrix ADC Appliance die Antwort vom Ursprungsserver abruft, aber die zwischengespeicherte Antwort wird nicht aktualisiert. Wenn das Cache-Modul Cache-Control- und Pragma-Header verarbeitet, wird die zwischengespeicherte Antwort aktualisiert.

In der folgenden Tabelle werden die Auswirkungen verschiedener Einstellungen für diese Header und die Einstellung Reload Request des Browsers ignorieren zusammengefasst.

Einstellung für Ignorieren Cache-Control und Pragma-Header Einstellung für Neuladeanforderung des Browsers ignorieren Ergebnis
Ja Ja oder Nein Ignorieren Sie die Header Cache-Control und Pragma vom Client, einschließlich der Direktive Cache-Control: no-cache.
Nein Ja Der Cache-Control: no-cache Header erzeugt eine Cache-Fehlmeldung, aber eine Antwort, die bereits im Cache ist, wird nicht aktualisiert.
Nein Nein Eine Anforderung, die einen Cache-Control: no-Cache-Header enthält, verursacht einen Cache-Fehler und die gespeicherte Antwort wird aktualisiert.

So ignorieren Sie Cache-Control- und Pragma-Header in einer Anforderung mit der Befehlszeilenschnittstelle

Geben Sie an der Eingabeaufforderung Folgendes ein:

set cache contentgroup <name> -ignoreReqCachingHdrs YES

So ignorieren Sie Browser-Neuladeanforderungen mit der Befehlszeilenschnittstelle

Geben Sie an der Eingabeaufforderung Folgendes ein:

set cache contentgroup <name> -ignoreReloadReq NO

Hinweis: Standardmäßig ist der Parameter -IgnoreReloadReq auf YES gesetzt.

Ignorieren Sie Cache-Control- und Pragma-Header in einer Anforderung über die GUI

  1. Navigieren Sie zu Optimierung > Integriertes Caching > Inhaltsgruppen, und wählen Sie die Content-Gruppe aus.
  2. Wählen Sie auf der Registerkarte Sonstiges in der Gruppe Einstellungen die Option Cache-Control ignorieren und Pragma-Kopfzeilen in Anforderungen aus.

    Konfigurieren von Cache-Control- und Pragma-Headern

Beispiel für eine Richtlinie zum Ignorieren von Cache-Control-Headern:

Im folgenden Beispiel konfigurieren Sie eine Anforderungszeitüberschreibungsrichtlinie, um Antworten zwischenzuspeichern, die Content-Typ: image/* enthalten, unabhängig vom Cache-Control-Header in der Antwort.

So konfigurieren Sie eine Richtlinie zur Überschreibung von Anforderungszeiten, um alle Antworten mit Bild/* zwischenzuspeichern

Leeren Sie den Cache mit der Option Alle ungültig machen.

Konfigurieren Sie eine neue Cache-Richtlinie, und leiten Sie die Richtlinie an eine bestimmte Content-Gruppe. Weitere Informationen finden Sie unter Konfigurieren einer Richtlinie im integrierten Cache.

Stellen Sie sicher, dass die von der Richtlinie verwendete Inhaltsgruppe so konfiguriert ist, dass Cache-Control-Header ignoriert werden, wie unter Cache-Control und Pragma-Header in Requests ignorieren beschrieben.

Binden Sie die Richtlinie an die Richtlinienbank für die Anforderungszeitüberschreibung.

Weitere Informationen finden Sie unter Globale Bindung einer integrierten Caching-Richtlinie.

Abfrage-Ursprungsserver jedes Mal, wenn eine Anfrage empfangen wird

Sie können die Citrix ADC Appliance so konfigurieren, dass sie immer den Ursprungsserver konsultieren, bevor Sie eine gespeicherte Antwort bereitstellen. Dies ist bekannt als Poll Every Time (PET). Wenn die Citrix ADC Appliance den Ursprungsserver konsultiert und die PET-Antwort noch nicht abgelaufen ist, überschreibt eine vollständige Antwort des Ursprungsservers den zwischengespeicherten Inhalt nicht. Diese Eigenschaft ist nützlich, wenn clientspezifische Inhalte bereitgestellt werden.

Nach Ablauf einer PET-Antwort aktualisiert die Citrix ADC Appliance sie, wenn die erste vollständige Antwort vom Ursprungsserver eintrifft.

Die Funktion PET funktioniert wie folgt:

Für eine zwischengespeicherte Antwort, die Validatoren in Form eines ETag oder eines Last-Modified Headers hat, wird diese automatisch als PET markiert und zwischengespeichert.

Sie können PET für eine Content-Gruppe konfigurieren.

Wenn Sie eine Inhaltsgruppe als PET konfigurieren, wird jede Antwort in der Inhaltsgruppe als PET markiert. Die PET-Inhaltsgruppe kann Antworten speichern, die keine Validatoren haben. Antworten, die automatisch als PET gekennzeichnet sind, sind immer abgelaufen. Antworten, die zu einer PET-Inhaltsgruppe gehören, können nach einer Verzögerung ablaufen, je nachdem, wie Sie die Inhaltsgruppe konfigurieren.

Zwei Arten von Anfragen sind von Polling betroffen:

  • Bedingte Anforderungen: Ein Client gibt eine bedingte Anforderung aus, um sicherzustellen, dass es sich bei der Antwort um die letzte Kopie handelt. Eine User-Agent-Anforderung für eine zwischengespeicherte PET-Antwort wird immer in eine bedingte Anforderung konvertiert und an den Ursprungsserver gesendet. Eine bedingte Anforderung hat Validatoren in If-Modified-Since oder If-None-Match-Headern. Der If-Modified-Since Header enthält die Zeit aus dem Last-Modified Header. Ein If-None-Match-Header enthält den ETag-Header-Wert der Antwort. Wenn die Kopie der Antwort des Clients neu ist, antwortet der Ursprungsserver mit 304 Not Modified. Wenn die Kopie veraltet ist, generiert eine bedingte Antwort ein 200 OK, das die gesamte Antwort enthält.
  • Nicht bedingte Anforderungen: Eine nicht bedingte Anforderung kann nur eine 200 OK generieren, die die gesamte Antwort enthält.
Antwort des Ursprungs-Servers Aktion
Senden Sie die vollständige Antwort Der Ursprungsserver sendet die Antwort unverändert an den Client. Wenn die zwischengespeicherte Antwort abgelaufen ist, wird sie aktualisiert.
304 Nicht geändert Die folgenden Header-Werte in der 304 Antwort werden mit der zwischengespeicherten Antwort zusammengeführt und die zwischengespeicherte Antwort wird dem Client bereitgestellt: Date, Expires, Alter, Cache-Control-Header Max-Age und S-Maxage Token
401 Nicht autorisiert; 400 fehlerhafte Anfrage; 405-Methode nicht zulässig; 406 nicht akzeptabel; 407 Proxy-Authentifizierung erforderlich Die Antwort des Ursprungs wird dem Kunden so serviert, wie es ist. Die zwischengespeicherte Antwort wird nicht geändert.
Jede andere Fehlerantwort, z. B. 404 Not Found Die Antwort des Ursprungs wird dem Kunden so serviert, wie es ist. Die zwischengespeicherte Antwort wird entfernt.

Hinweis: Der Parameter “Pall Every Time” behandelt die betroffenen Antworten als nicht speicherbar.

So konfigurieren Sie die Abfrage jedes Mal mit der Befehlszeilenschnittstelle

Geben Sie an der Eingabeaufforderung Folgendes ein:

add cache contentgroup <contentGroupName> -pollEveryTime YES

Abfragen über die GUI

  1. Navigieren Sie zu Optimierung > Integriertes Caching > Inhaltsgruppen, und wählen Sie die Content-Gruppe aus.
  2. Wählen Sie auf der Registerkarte Sonstiges in der Gruppe Einstellungen die Option Jedes Mal abfragen (zwischengespeicherte Inhalte mit Ursprung für jede Anforderung validieren).

    Konfiguration der Inhaltsgruppenabfrage

PET- und kundenspezifische Inhalte

Die PET-Funktion kann sicherstellen, dass Inhalte für einen Kunden angepasst werden. Eine Website, die Inhalte in mehreren Sprachen bereitstellt, untersucht beispielsweise den Anforderungsheader Accept-Language, um die Sprache für den Inhalt auszuwählen, den sie bereitstellt. Für eine mehrsprachige Website, auf der Englisch die vorherrschende Sprache ist, können alle englischsprachigen Inhalte in einer PET-Content-Gruppe zwischengespeichert werden. Dadurch wird sichergestellt, dass jede Anforderung an den Ursprungsserver geht, um die Sprache für die Antwort zu bestimmen. Wenn die Antwort Englisch ist und der Inhalt sich nicht geändert hat, kann der Ursprungsserver einen 304 Not Modified für den Cache bereitstellen.

Das folgende Beispiel zeigt Befehle zum Zwischenspeichern englischer Antworten in einer PET-Inhaltsgruppe, zum Konfigurieren eines benannten Ausdrucks, der englische Antworten im Cache identifiziert, und zum Konfigurieren einer Richtlinie, die diese Inhaltsgruppe und den benannten Ausdruck verwendet. Fett wird für die Hervorhebung verwendet:

add cache contentgroup EnglishLanguageGroup -pollEveryTime YES
add expression containsENExpression –rule "http.res.header(\\"Content-Language\\").contains(\\"en\\")"
add cache policy englishPolicy -rule containsENExpression -action CACHE -storeInGroup englishLanguageGroup
bind cache policy englishPolicy -priority 100 -precedeDefRules NO

PET und Authentifizierung, Autorisierung und Auditing

Outlook Web Access (OWA) ist ein gutes Beispiel für dynamisch generierte Inhalte, die von PET profitieren. Alle E-Mail-Antworten (*.EML-Objekte) verfügen über einen ETag-Validator, mit dem sie als PET-Antworten gespeichert werden können.

Jede Anforderung für eine E-Mail-Antwort wird an den Ursprungsserver gesendet, auch wenn die Antwort zwischengespeichert ist. Der Ursprungsserver bestimmt, ob der Anforderer authentifiziert und autorisiert ist. Außerdem wird überprüft, ob die Antwort auf dem Ursprungsserver vorhanden ist. Wenn alle Ergebnisse positiv sind, sendet der Ursprungsserver eine 304 Not Modified Antwort.