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. Dies umfasst das Ändern des Standardverhaltens, das bewirkt, dass der Cache von dokumentierten Standards abweicht, das Überschreiben von HTTP-Headern, die dazu führen können, dass cachefähige Inhalte nicht im Cache gespeichert werden, und das Konfigurieren des Cache, um immer den Ursprung nach aktualisierten Inhalten abzufallen.

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 ist cachefähig, auch wenn sie den Vary: Accept-Encoding-Header enthält.
  • Der integrierte Cache ignoriert die Werte des Cache-Steuerelements der Header: no-cache und Cache-Control: privat. 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 (Inhaltstyp = Bild/*) wird immer als cachefähig betrachtet, selbst wenn eine Bildantwort 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 sie zwischengespeichert werden. 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 zwingen einen RFC-konformen Cache dazu, eine zwischengespeicherte Antwort vom Ursprungsserver neu zu laden:

Cache-control: max-age=0

Cache-control: no-cache

Um sich vor Denial-of-Service-Angriffen zu schützen, ist dieses Verhalten nicht die Standardeinstellung.

  • Standardmäßig betrachtet das Caching-Modul eine Antwort als zwischenspeicherbar, es sei denn, ein anderer Status eines Response-Headers. Um dieses Verhalten RFC 2616-konform -weakNegResExpiry zu machen, legen Sie für alle Content-Gruppen -weakPosRelExpiry und auf 0 fest.

Cookies von einer Antwort entfernen

Cookies werden oft für einen Benutzer personalisiert und sollten normalerweise nicht zwischengespeichert werden. Der Parameter Remove Response Cookies entfernt die Header Set-Cookie and Set-Cookie2, bevor eine Antwort zwischenspeichert wird. Standardmäßig verhindert die Remove Response Cookies Option für eine Content-Gruppe das Zwischenspeichern von Antworten mit Set-Cookie oder Set-Cookie2 Headern.

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

Citrix empfiehlt, dass Sie den Standard Remove Response Cookies für jede Content-Gruppe akzeptieren, die eingebettete Antworten speichert, z. B. Bilder.

So konfigurieren Sie Remove 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 Reaktions-Cookies für eine Content-Gruppe mithilfe der Citrix ADC GUI

  1. Navigieren Sie zu Optimierung > Integriertes Caching > Contentgruppen, 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 sich aus Cache-Anfragen ergeben. Die Citrix ADC Appliance ändert keine Header in Antworten, die sich aus Cache-Fehlern ergeben.

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.
über 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. “
Tag Der Cache unterstützt die Antwortvalidierung mit Tag Last-Modified-Header und Headern, um festzustellen, ob eine Antwort veraltet ist. Der Cache fügt eine Tag Antwort nur ein, wenn er die Antwort zwischenspeichert und der Original-Server keinen eigenen Tag Header eingefügt hat. Der Tag Wert ist eine willkürliche eindeutige Nummer. Der Tag Wert für eine Antwort ändert sich, wenn sie vom Ursprungsserver aktualisiert wird, aber er bleibt gleich, wenn der Server eine Antwort auf 304 (Objekt nicht aktualisiert) sendet. Original-Server generieren in der Regel keine Validatoren für dynamische Inhalte, da dynamischer Content als nicht cachefähig angesehen wird. Sie können dieses Verhalten überschreiben. Beim Einfügen von Tag 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 Benutzeragenten zum Cache einer Antwort zu zwingen, konfigurieren Sie den integrierten Cache so, dass er einen Tag Header einfügt und den vom Ursprung 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.
über 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. “
Tag Der Cache unterstützt die Antwortvalidierung mit Last-Modified- und Tag-Headern, um festzustellen, ob eine Antwort veraltet ist. Der Cache fügt eine Tag Antwort nur ein, wenn er die Antwort zwischenspeichert und der Original-Server keinen eigenen Tag Header eingefügt hat. Der Tag Wert ist eine willkürliche eindeutige Nummer. Der Tag Wert für eine Antwort ändert sich, wenn sie vom Ursprungsserver aktualisiert wird, aber er bleibt gleich, wenn der Server eine Antwort auf 304 (Objekt nicht aktualisiert) sendet. Original-Server generieren in der Regel keine Validatoren für dynamische Inhalte, da dynamischer Content als nicht cachefähig angesehen wird. Sie können dieses Verhalten überschreiben. Beim Einfügen von Tag 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 Benutzeragenten zum Cache einer Antwort zu zwingen, konfigurieren Sie den integrierten Cache so, dass er einen Tag Header einfügt und den vom Ursprung 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.

Fügen Sie einen Alters-, Vake- oder Tag-Header

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.

    Konfigurieren von HTTP-Headereinfügen

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.

Fügen Sie mithilfe der Citrix ADC Befehlsschnittstelle einen Cache-Control-Header ein

Geben Sie an der Eingabeaufforderung Folgendes ein:

set cache contentgroup <name> -cacheControl <value>

Fügen Sie mithilfe der Citrix ADC GUI einen Cache-Control-Header ein

  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.

Ignoriere Cache-Control und Pragma-Header in Anfragen

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 -IgnorerEloadReq-Parameter auf YES festgelegt.

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

  1. Navigieren Sie zu Optimierung > Integriertes Caching > Contentgruppen, 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.

Poll-Original-Server 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:

Bei einer zwischengespeicherten Antwort, die Validatoren in Form eines Tags oder eines Last-Modified-Headers enthält, wird die Antwort 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 Tag-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 Anfrage kann nur 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

Umfrage unter Verwendung der GUI

  1. Navigieren Sie zu Optimierung > Integriertes Caching > Contentgruppen, 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 von Abfragen für Content-

PET- und kundenspezifische Inhalte

Die PET-Funktion kann sicherstellen, dass Inhalte für einen Kunden angepasst werden. Beispielsweise untersucht eine Website, die Inhalte in mehreren Sprachen bereitstellt, den Accept-Language-Anforderungsheader, um die Sprache für den Inhalt auszuwählen, den sie bereitstellt. Für eine mehrsprachige Website, bei 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) haben 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.