Konfigurieren von Cookies, Kopfzeilen und Abfragen

In diesem Thema werden die Verfahren zum Konfigurieren der Verwaltung von Cookies, HTTP-Headern und Ursprungsserverabfragen beschrieben. Dazu gehören 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 zwischenspeicherbarer Inhalt nicht im Cache gespeichert wird, und Konfigurieren des Caches so, dass der Ursprung immer unter speziellen Umständen für aktualisierte Inhalte abgerufen wird.

Abweichung des Cache-Verhaltens von den Standards

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

  • RFC 2616, Hypertext Transfer Protocol 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 Cacheverhalten weicht von den Spezifikationen wie folgt ab:

  • Es gibt nur 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 zwischenspeicherbar, selbst wenn sie den Vary: Accept-Encoding Header enthält.
  • Der integrierte Cache ignoriert die Werte der Header Cache-Control: no-cache und Cache-Control: private. Beispielsweise wird eine Antwort, die Cache-Control: no-cache=” Set-Cookie” enthält, so behandelt, als ob die Antwort Cache-Control: no-cache enthält. Standardmäßig wird die Antwort nicht zwischengespeichert.
  • Ein Bild (Content-Type = Bild/*) gilt immer als zwischenspeicherbar, auch wenn eine Bildreaktion 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 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

Um vor Denial-of-Service-Angriffen zu schützen, ist dieses Verhalten nicht der Standardwert. Weitere Informationen finden Sie im Abschnitt Einfügen eines Cache-Control-Headers.

  • Standardmäßig betrachtet das Caching-Modul eine Antwort als zwischenspeicherbar, es sei denn, ein Antwort-Header gibt etwas anderes an. Um dieses Verhalten RFC 2616 kompatibel zu machen, setzen Sie -weakPosRelExpiry und -weakNegResExpiry für alle Inhaltsgruppen auf 0.

Cookies von einer Antwort entfernen

Cookies werden oft für einen Benutzer personalisiert und sollten normalerweise nicht zwischengespeichert werden. Der Parameter Response-Cookies entfernen entfernt Set-Cookie- und Set-Cookie2-Header, bevor eine Antwort zwischengespeichert wird. Standardmäßig verhindert die Option Response-Cookies entfernen 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-Cookie und Set-Cookie2 vor dem Caching zu entfernen, unabhängig davon, wie die Content-Gruppe konfiguriert ist. Hinweis: Citrix empfiehlt, dass Sie die standardmäßigen Response-Cookies entfernen für jede Inhaltsgruppe akzeptieren, in der eingebettete Antworten gespeichert werden, z. B. Bilder.

So konfigurieren Sie Remove Response Cookies für eine Content-Gruppe mit der Befehlszeilenschnittstelle:

Geben Sie an der Eingabeaufforderung Folgendes ein:

set cache contentgroup <name> -removeCookies YES

So konfigurieren Sie Response-Cookies entfernen für eine Content-Gruppe mithilfe des Konfigurationsdienstprogramms

  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® Citrix ADC® -Appliance ändert Header in Antworten, die aufgrund von Cache-Fehlern entstehen, nicht.

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, aber er bleibt unverändert, wenn der Server eine 304 (nicht aktualisiertes Objekt) Antwort sendet. Origin-Server 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-Kontrolle 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, aber er bleibt unverändert, wenn der Server eine 304 (nicht aktualisiertes Objekt) Antwort sendet. Origin-Server 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-Kontrolle 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-, Va- oder ETag-Headers

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

So fügen Sie einen Age-, Va- oder ETag-Header mit der Befehlszeilenschnittstelleein:

Geben Sie an der Eingabeaufforderung Folgendes ein:

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

So fügen Sie einen Zeitalter, Via oder Etag Header mit der GUI ein

  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. Beachten Sie, dass Sie den Va-Wert in den Haupteinstellungen für den Cache 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.

So fügen Sie einen Cache-Control-Header mit der Befehlszeilenschnittstelle ein

Geben Sie an der Eingabeaufforderung Folgendes ein:

set cache contentgroup <name> -cacheControl <value>

So fügen Sie einen Cache-Control-Header mithilfe des Konfigurationsdienstprogramms ein

  1. Navigieren Sie zu Optimierung > Integriertes Caching > Content-Gruppen und
    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.

Ignorieren von Cache-Control- und Pragma-Headern 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 Parameter -ignoreReloadReq auf YES festgelegt.

So ignorieren Sie Cache-Control und Pragma-Header in einer Anforderung mit der 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.

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.

Weitere Informationen finden Sie unter Antworten in einer Content-Gruppe.

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.

Abrufen des Ursprungsservers jedes Mal, wenn eine Anforderung 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 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 Pol 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

So konfigurieren Sie die Umfrage jedes Mal mit der 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).

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, die Anforderungskopfzeile Accept-Language, um die Sprache für den Inhalt auszuwählen, den sie bereitstellt. Bei einer mehrsprachigen Website, auf der Englisch die vorherrschende Sprache ist, können alle englischsprachigen Inhalte in einer PET-Inhaltsgruppe 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.