ADC

Cookies, Header und Polling konfigurieren

In diesem Thema wird erläutert, wie die Cache-Verwaltung von Cookies, HTTP-Headern und Original-Serverabfragen konfiguriert wird. 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önnten, dass cachbarer Inhalt nicht im Cache gespeichert wird, und das Konfigurieren des Caches, 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”
  • Das in RFC 2617, “HTTP-Authentifizierung: Basic and Digest Access Authentication” beschriebene Caching-Verhalten
  • Das in RFC 2965, “HTTP State Management Mechanism” beschriebene Caching-Verhalten

Die integrierten Richtlinien und die Attribute der Standard-Inhaltsgruppe 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 Vari-Header. Standardmäßig wird jede Antwort, die einen Vari-Header enthält, als nicht cachbar angesehen, sofern sie nicht komprimiert ist. Eine komprimierte Antwort enthält Inhaltscodierung: gzip, Inhaltscodierung: deflate oder Inhaltscodierung: pack200-gzip und ist auch dann cachbar, wenn sie den Header Vary: Accept-Codierung enthält.
  • Der integrierte Cache ignoriert die Werte der Header-Cache-Steuerung: kein Cache und Cache-Kontrolle: privat. Zum Beispiel wird eine Antwort, die Cache-Kontrolle enthält: NO-Cache=”set-Cookie” behandelt, als ob die Antwort Cache-Control: no-cache enthielt. Standardmäßig wird die Antwort nicht zwischengespeichert.
  • Ein Bild (Content-Typ = image/*) wird immer als cachbar 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 zwischengespeichert wird. Dies weicht von RFC 2965 ab. Sie können RFC-konformes 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
<!--NeedCopy-->
  • Die folgenden Cache-Control-Header in einer Anforderung erzwingen einen RFC-kompatiblen Cache, eine zwischengespeicherte Antwort vom Original-Server neu zu laden:

Cache-control: max-age=0

Cache-control: no-cache

Zum Schutz vor Denial-of-Service-Angriffen ist dieses Verhalten nicht die Standardeinstellung.

  • Standardmäßig betrachtet das Caching-Modul eine Antwort als cachbar, sofern nicht anders ein Response-Header-Status vorliegt. Um dieses Verhalten mit RFC 2616 konform zu machen, setzen Sie -weakPosRelExpiry und -weakNegResExpiry für alle Inhaltsgruppen auf 0.

Cookies aus einer Antwort entfernen

Cookies sind oft für einen Benutzer personalisiert und sollten in der Regel 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 Option Remove Response Cookies für eine Content-Gruppe das Zwischenspeichern von Antworten mit den Headern Set-Cookie oder Set-Cookie2.

Hinweis: Wenn Bilder zwischengespeichert werden, besteht das integrierte Verhalten darin, die Header Set-Cookie und Set-Cookie2 vor dem Zwischenspeichern 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.

Konfigurieren von Remove Response Cookies für eine Content-Gruppe über die Befehlszeilenschnittstelle:

Geben Sie in der Befehlszeile Folgendes ein:

set cache contentgroup <name> -removeCookies YES

Konfigurieren von Response-Cookies für eine Inhaltsgruppe mithilfe der NetScaler GUI

  1. Navigieren Sie zu Optimierung > Integriertes Caching > Inhaltsgruppenund wählen Sie die Inhaltsgruppe aus.
  2. Wählen Sie auf der Registerkarte Andere in der Gruppe Einstellungen die Option Response-Cookies entfernen aus.

Einfügen von HTTP-Headern zur Reaktionszeit

Der integrierte Cache kann HTTP-Header in Antworten einfügen, die sich aus Cache-Anforderungen ergeben. Die NetScaler 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.

Header Spezifikation
Alter Gibt das Alter der Antwort in Sekunden an, berechnet aus dem Zeitpunkt, zu dem die Antwort auf dem Original-Server 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 Anfrage oder eine Antwort auf. Die NetScaler Appliance fügt in jede Antwort, die sie aus dem Cache liefert, einen Via-Header ein. Der Standardwert des eingefügten Headers ist NS-CACHE-10.0: letztes Oktett der NetScaler IP-Adresse. Weitere Informationen finden Sie unter “Globale Attribute für das Caching konfigurieren.”
Tag Der Cache unterstützt die Response-Validierung mit Last-Modified und Tag-Headern, um festzustellen, ob eine Antwort veraltet ist. Der Cache fügt nur dann ein Tag in eine Antwort ein, wenn er die Antwort zwischenspeichert und der Original-Server keinen eigenen Tag-Header eingefügt hat. Der Wert Tag ist eine beliebige eindeutige Zahl. Der Wert Tag für eine Antwort ändert sich, wenn sie vom Original-Server aktualisiert wird, aber er bleibt unverändert, wenn der Server eine 304-Antwort (Objekt nicht aktualisiert) sendet. Original-Server generieren normalerweise keine Validatoren für dynamischen Inhalt, da dynamischer Inhalt als nicht cachbar angesehen wird. Sie können dieses Verhalten außer Kraft setzen. Beim Einfügen von Tag-Header darf der Cache keine vollständigen Antworten liefern. Stattdessen muss der Benutzeragent die dynamische Antwort, die vom integrierten Cache zum ersten Mal gesendet wurde, zwischenspeichern. Um einen Benutzeragenten zum Zwischenspeichern 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-Steuerung Die NetScaler Appliance ändert normalerweise keine Header zur Cachefähigkeit in Antworten, die vom Original-Server aus bereitgestellt werden. Wenn der Original-Server eine Antwort sendet, die als nicht cachbar gekennzeichnet ist, behandelt der Client die Antwort als nicht cachbar, auch wenn die NetScaler Appliance die Antwort im Cache speichert. Um dynamische Antworten in einem Benutzeragenten zwischenzuspeichern, können Sie Cache-Control-Header vom Original-Server ersetzen. Dies gilt nur für Benutzeragenten und andere dazwischenliegende Caches. Sie haben keinen Einfluss auf den integrierten Cache.
Header Spezifikation
Alter Gibt das Alter der Antwort in Sekunden an, berechnet aus dem Zeitpunkt, zu dem die Antwort auf dem Original-Server 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 Anfrage oder eine Antwort auf. Die NetScaler Appliance fügt in jede Antwort, die sie aus dem Cache liefert, einen Via-Header ein. Der Standardwert des eingefügten Headers ist “NS-CACHE-9.2: letztes Oktett der NetScaler-IP-Adresse”. Weitere Informationen finden Sie unter “Globale Attribute für das Caching konfigurieren.”
Tag Der Cache unterstützt die Antwortvalidierung mithilfe der Header “Letzte Änderung” und “Tag”, um festzustellen, ob eine Antwort veraltet ist. Der Cache fügt nur dann ein Tag in eine Antwort ein, wenn er die Antwort zwischenspeichert und der Original-Server keinen eigenen Tag-Header eingefügt hat. Der Wert Tag ist eine beliebige eindeutige Zahl. Der Wert Tag für eine Antwort ändert sich, wenn sie vom Original-Server aktualisiert wird, aber er bleibt unverändert, wenn der Server eine 304-Antwort (Objekt nicht aktualisiert) sendet. Original-Server generieren normalerweise keine Validatoren für dynamischen Inhalt, da dynamischer Inhalt als nicht cachbar angesehen wird. Sie können dieses Verhalten außer Kraft setzen. Beim Einfügen von Tag-Header darf der Cache keine vollständigen Antworten liefern. Stattdessen muss der Benutzeragent die dynamische Antwort, die vom integrierten Cache zum ersten Mal gesendet wurde, zwischenspeichern. Um einen Benutzeragenten zum Zwischenspeichern 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-Steuerung Die NetScaler Appliance ändert normalerweise keine Header zur Cachefähigkeit in Antworten, die vom Original-Server aus bereitgestellt werden. Wenn der Original-Server eine Antwort sendet, die als nicht cachbar gekennzeichnet ist, behandelt der Client die Antwort als nicht cachbar, auch wenn die NetScaler Appliance die Antwort im Cache speichert. Um dynamische Antworten in einem Benutzeragenten zwischenzuspeichern, können Sie Cache-Control-Header vom Original-Server ersetzen. Dies gilt nur für Benutzeragenten und andere dazwischenliegende Caches. Sie haben keinen Einfluss auf den integrierten Cache.

Fügen Sie einen Alter-, via- oder Tag-Header ein

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

Fügen Sie mithilfe der NetScaler-Befehlsschnittstelle einen Age-, Via- oder ETAG-Headerein:

Geben Sie in der Befehlszeile Folgendes ein:

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

Konfigurieren Sie den Age-, Via- oder ETAG-Header mithilfe der NetScaler GUI

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

Fügen Sie einen Cache-Control-Header ein

Wenn der integrierte Cache einen vom Originalserver 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 NetScaler Befehlszeilenschnittstelle einen Cache-Control-Header ein

Geben Sie in der Befehlszeile Folgendes ein:

set cache contentgroup <name> -cacheControl <value>

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

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

Ignoriere Cache-Kontrolle und Pragma-Header in Anfragen

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

  • max-age
  • max-abgestanden
  • nur-wenn-zwischengespeichert
  • kein Cache

Ein Pragma: No-Cache-Header in einer Anforderung wird genauso behandelt wie ein Cache-Control: No-Cache-Header.

Wenn Sie das Caching-Modul so konfigurieren, dass es die Header Cache-Control und Pragma ignoriert, veranlasst eine Anforderung, die einen Cache-Control: No-Cache-Header enthält, die NetScaler Appliance, die Antwort vom Original-Server abzurufen, aber die zwischengespeicherte Antwort wird nicht aktualisiert. Wenn das Caching-Modul die Header Cache-Control und Pragma verarbeitet, wird die zwischengespeicherte Antwort aktualisiert.

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

Einstellung für Ignorieren-Cache-Control und Pragma-Header Einstellung für Neuladeanfrage des Browsers ignorieren Ergebnis
Ja Ja oder Nein Ignorieren Sie die Cache-Control- und Pragma-Header des Clients, einschließlich der Cache-Control: no-Cache-Direktive.
Nein Ja Der Cache-Control: No-Cache-Header erzeugt einen Cache-Fehlschuss, aber eine Antwort, die sich bereits im Cache befindet, wird nicht aktualisiert.
Nein Nein Eine Anforderung, die einen Cache-Control: No-Cache-Header enthält, verursacht einen Cache-Fehlschlag und die gespeicherte Antwort wird aktualisiert.

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

Geben Sie in der Befehlszeile Folgendes ein:

set cache contentgroup <name> -ignoreReqCachingHdrs YES

So ignorieren Sie Anfragen zum Neuladen von Browsern mithilfe der Befehlszeilenschnittstelle

Geben Sie in der Befehlszeile Folgendes ein:

set cache contentgroup <name> -ignoreReloadReq NO

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

Ignorieren Sie Cache-Control- und Pragma-Header in einer Anfrage mithilfe der GUI

  1. Navigieren Sie zu Optimierung > Integriertes Caching > Inhaltsgruppenund wählen Sie die Inhaltsgruppe aus.
  2. Wählen Sie auf der Registerkarte Andere in der Gruppe Einstellungen die Option Cache-Control und Pragma-Header ignorieren in der Option Anfragen aus.

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

Im folgenden Beispiel konfigurieren Sie eine Richtlinie zum Überschreiben der Anforderungszeit, um Antworten zu cachen, die Content-Typ enthalten: image/* unabhängig vom Cache-Control-Header in der Antwort.

Konfigurieren einer Richtlinie zum Überschreiben der Anforderungszeit, um alle Antworten mit image/* zu cachen

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 weiter. Weitere Informationen finden Sie unter “Konfigurieren einer Richtlinie im integrierten Cache. “

Stellen Sie sicher, dass die von der Richtlinie verwendete Content-Gruppe so konfiguriert ist, dass sie Cache-Control-Header ignoriert, wie in “Cache-Control und Pragma-Header in Requests ignorieren” beschrieben ist.

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

Weitere Informationen finden Sie unter Global Binden einer integrierten Caching-Richtlinie .

Poll-Original-Server jedes Mal, wenn eine Anfrage empfangen wird

Sie können die NetScaler Appliance so konfigurieren, dass sie immer den Original-Server konsultiert, bevor eine gespeicherte Antwort gesendet wird. Dies ist bekannt als Poll Every Time (PET). Wenn die NetScaler Appliance den Original-Server konsultiert und die PET-Antwort nicht abgelaufen ist, überschreibt eine vollständige Antwort des Original-Servers den zwischengespeicherten Inhalt nicht. Diese Eigenschaft ist nützlich, wenn Sie kundenspezifische Inhalte bereitstellen.

Nachdem eine PET-Antwort abgelaufen ist, aktualisiert die NetScaler Appliance sie, wenn die erste vollständige Antwort vom Original-Server eingeht.

Die Funktion “Poll Every Time” (PET) funktioniert wie folgt:

Bei einer zwischengespeicherten Antwort, die Validatoren in Form eines Tags oder eines Headers für die letzte Änderung enthält, wird die Antwort automatisch als PET gekennzeichnet und zwischengespeichert, wenn sie abläuft.

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

Wenn Sie eine Content-Gruppe als PET konfigurieren, wird jede Antwort in der Content-Gruppe als PET gekennzeichnet. 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 Content-Gruppe konfigurieren.

Zwei Arten von Anfragen sind von Abfragen betroffen:

  • Bedingte Anfragen: Ein Kunde stellt eine bedingte Anfrage aus, um sicherzustellen, dass die Antwort, die er hat, die neueste Kopie ist. Eine User-Agent-Anfrage für eine zwischengespeicherte PET-Antwort wird immer in eine bedingte Anforderung umgewandelt und an den Original-Server gesendet. Eine bedingte Anforderung hat Validatoren in den If-None-Match Kopfzeilen If-Modified-Since oder. 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 Original-Server mit 304 Not Modified. Wenn die Kopie veraltet ist, generiert eine bedingte Antwort ein 200 OK, das die gesamte Antwort enthält.
  • Unbedingte Anfragen: Eine bedingungslose Anforderung kann nur 200 OK generieren, die die gesamte Antwort enthält.
Antwort des Original-Servers Aktion
Sende die vollständige Antwort Der Original-Server sendet die Antwort unverändert an den Client. Wenn die zwischengespeicherte Antwort abgelaufen ist, wird sie aktualisiert.
304 nicht modifiziert Die folgenden Header-Werte in der 304-Antwort werden mit der zwischengespeicherten Antwort zusammengeführt und die zwischengespeicherte Antwort wird dem Client zugestellt: Date, Expires, Age, Cache-Control-Header Max-Age und S-Maxage-Token
401 nicht autorisiert; 400 schlechte Anfrage; 405 Methode nicht zulässig; 406 nicht akzeptabel; 407 Proxy-Authentifizierung erforderlich Die Antwort des Ursprungs wird dem Kunden so serviert, wie sie 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 sie ist. Die zwischengespeicherte Antwort wird entfernt.

Hinweis: Der Parameter “Umfrage jedes Mal” behandelt die betroffenen Antworten als nicht speicherbar.

So konfigurieren Sie die Umfrage jedes Mal mit der Befehlszeilenschnittstelle

Geben Sie in der Befehlszeile Folgendes ein:

add cache contentgroup <contentGroupName> -pollEveryTime YES

Umfrage mit der GUI

  1. Navigieren Sie zu Optimierung > Integriertes Caching > Inhaltsgruppenund wählen Sie die Inhaltsgruppe aus.
  2. Wählen Sie auf der Registerkarte Andere in der Gruppe Einstellungen die Option Jedes Mal abfragen (zwischengespeicherten Inhalt mit Herkunft für jede Anfrage überprüfen) aus.

PET und kundenspezifische Inhalte

Die PET-Funktion kann sicherstellen, dass der Inhalt für einen Kunden angepasst wird. 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. Bei einer mehrsprachigen Website, bei der Englisch die vorherrschende Sprache ist, können alle englischsprachigen Inhalte in einer PET-Inhaltsgruppe zwischengespeichert werden. Dadurch wird sichergestellt, dass jede Anfrage an den Original-Server geht, um die Sprache für die Antwort zu bestimmen. Wenn die Antwort englisch ist und sich der Inhalt nicht geändert hat, kann der Original-Server eine 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 zur Betonung 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
<!--NeedCopy-->

PET und Authentifizierung, Autorisierung und Prüfung

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 Anfrage nach einer E-Mail-Antwort wird an den Original-Server weitergegeben, auch wenn die Antwort zwischengespeichert ist. Der Original-Server bestimmt, ob der Anforderer authentifiziert und autorisiert ist. Es überprüft auch, ob die Antwort im Original-Server vorhanden ist. Wenn alle Ergebnisse positiv sind, sendet der Ursprungsserver eine 304 Not Modified Antwort.