Den Cache-Schlüssel verstehen - Amazon CloudFront

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Den Cache-Schlüssel verstehen

Der Cache-Schlüssel bestimmt, ob eine Viewer-Anfrage an einen CloudFront Edge-Standort zu einem Cache-Treffer führt. Der Cache-Schlüssel ist der eindeutige Bezeichner für ein Objekt im Cache. Jedes Objekt im Cache verfügt über einen eindeutigen Cache-Schlüssel.

Ein Cache-Treffer tritt auf, wenn eine Viewer-Anforderung denselben Cache-Schlüssel wie eine vorherige Anforderung generiert und sich das Objekt für diesen Cache-Schlüssel im Cache des Edge-Standorts befindet und gültig ist. Bei einem Cache-Treffer wird das angeforderte Objekt dem Betrachter von einem CloudFront Edge-Standort aus zugestellt, was folgende Vorteile bietet:

  • Geringere Auslastung Ihres Ursprungs-Servers

  • Reduzierte Latenz für den Viewer

Sie können eine bessere Leistung für Ihre Website oder Anwendung erzielen, wenn Sie eine höhere Cache-Trefferquote haben (ein höherer Anteil an Viewer-Anforderungen, die zu einem Cache-Treffer führen). Eine Möglichkeit, die Cache-Trefferquote zu verbessern, besteht darin, nur die minimal notwendigen Werte in den Cache-Schlüssel aufzunehmen. Weitere Informationen finden Sie in den folgenden Abschnitten.

Sie können die Werte (URL-Abfragezeichenfolgen, HTTP-Header und Cookies) im Cache-Schlüssel mithilfe einer Cache-Richtlinie ändern. (Sie können den Cache-Schlüssel auch mit einer Lambda@Edge-Funktion ändern.) Bevor Sie den Cache-Schlüssel ändern, ist es wichtig zu verstehen, wie Ihre Anwendung entworfen ist und wann und wie sie verschiedene Antworten basierend auf den Eigenschaften der Viewer-Anforderung bereitstellen kann. Wenn ein Wert in der Viewer-Anforderung die Antwort bestimmt, die Ihr Ursprung zurückgibt, sollten Sie diesen Wert in den Cache-Schlüssel aufnehmen. Wenn Sie jedoch einen Wert in den Cache-Schlüssel einfügen, der sich nicht auf die Antwort auswirkt, die Ihr Ursprung zurückgibt, kann es passieren, dass Sie doppelte Objekte zwischenspeichern.

Standard-Cache-Schlüssel

Standardmäßig enthält der Cache-Schlüssel für eine CloudFront Distribution die folgenden Informationen:

  • Der Domainname der CloudFront Distribution (z. B. d111111abcdef8.cloudfront.net)

  • Der URL-Pfad des angeforderten Objekts (z. B, /content/stories/example-story.html)

Anmerkung

DieOPTIONS-Methode ist im Cache-Schlüssel für OPTIONS-Anforderungen enthalten. Dies bedeutet, dass Antworten auf OPTIONS-Anforderungen getrennt von Antworten auf GET- und HEAD-Anforderungen zwischengespeichert werden.

Andere Werte aus der Viewer-Anforderung sind standardmäßig nicht im Cache-Schlüssel enthalten. Betrachten Sie die folgende HTTP-Anforderung von einem Webbrowser.

GET /content/stories/example-story.html?ref=0123abc&split-pages=false HTTP/1.1 Host: d111111abcdef8.cloudfront.net User-Agent: Mozilla/5.0 Gecko/20100101 Firefox/68.0 Accept: text/html,*/* Accept-Language: en-US,en Cookie: session_id=01234abcd Referer: https://news.example.com/

Wenn eine Viewer-Anfrage wie in diesem Beispiel an einem CloudFront Edge-Standort eingeht, wird anhand des Cache-Schlüssels CloudFront ermittelt, ob ein Cache-Treffer vorliegt. Standardmäßig sind nur die folgenden Komponenten der Anforderung im Cache-Schlüssel enthalten: /content/stories/example-story.html und d111111abcdef8.cloudfront.net. Wenn sich das angeforderte Objekt nicht im Cache befindet (ein Cache-Fehler), wird eine Anfrage an den Ursprung CloudFront gesendet, um das Objekt abzurufen. Nachdem das Objekt abgerufen wurde, wird es an den Viewer CloudFront zurückgegeben und im Cache der Edge-Position gespeichert.

When CloudFront empfängt eine weitere Anfrage für dasselbe Objekt, die durch den Cache-Schlüssel bestimmt wird, und CloudFront stellt das zwischengespeicherte Objekt sofort dem Betrachter zur Verfügung, ohne eine Anfrage an den Ursprung zu senden. Beachten Sie beispielsweise die folgende HTTP-Anforderung, die nach der vorherigen Anforderung eingeht.

GET /content/stories/example-story.html?ref=xyz987&split-pages=true HTTP/1.1 Host: d111111abcdef8.cloudfront.net User-Agent: Mozilla/5.0 AppleWebKit/537.36 Chrome/83.0.4103.116 Accept: text/html,*/* Accept-Language: en-US,en Cookie: session_id=wxyz9876 Referer: https://rss.news.example.net/

Diese Anforderung gilt für dasselbe Objekt wie die vorherige Anforderung, unterscheidet sich jedoch von der vorherigen Anforderung. Sie hat eine andere URL-Abfragezeichenfolge, verschiedene User-Agent- und Referer-Header und ein anderes session_id- Cookie. Keiner dieser Werte ist jedoch standardmäßig Teil des Cache-Schlüssels, so dass diese zweite Anforderung zu einem Cache-Treffer führt.

Passen Sie den Cache-Schlüssel an

In einigen Fällen möchten Sie möglicherweise mehr Informationen in den Cache-Schlüssel aufnehmen, obwohl dies zu weniger Cache-Treffern führen kann. Sie können angeben, was in dem Cache-Schlüssel enthalten sein soll, indem Sie eine Cache-Richtlinie verwenden.

Wenn Ihr Ursprungs-Server beispielsweise den Accept-Language-HTTP-Header in Viewer-Anforderungen verwendet, um unterschiedliche Inhalte basierend auf der Sprache des Viewers zurückzugeben, sollten Sie diesen Header möglicherweise in den Cache-Schlüssel einfügen. Wenn Sie das tun, CloudFront verwendet er diesen Header, um Cache-Treffer zu ermitteln, und bezieht den Header in ursprüngliche Anfragen ein (Anfragen, die CloudFront an den Ursprung gesendet werden, wenn ein Cache-Fehler auftritt).

Eine mögliche Folge der Aufnahme zusätzlicher Werte in den Cache-Schlüssel besteht darin, dass aufgrund der Variation, die bei Viewer-Anfragen auftreten kann, CloudFront möglicherweise doppelte Objekte zwischengespeichert werden. Beispielsweise können Viewer einen der folgenden Werte für die Accept-Language-Header senden:

  • en-US,en

  • en,en-US

  • en-US, en

  • en-US

All diese unterschiedlichen Werte deuten darauf hin, dass die Sprache des Betrachters Englisch ist, aber die Variation kann CloudFront dazu führen, dass dasselbe Objekt mehrmals zwischengespeichert wird. Dies kann Cache-Treffer reduzieren und die Anzahl der Ursprungsanforderungen erhöhen. Sie können diese Dopplung vermeiden, indem Sie den Accept-Language-Header nicht in den Cache-Schlüssel einfügen und stattdessen Ihre Website oder Anwendung so konfigurieren, dass verschiedene URLs für Inhalte in verschiedenen Sprachen verwendet werden (z. B. /en-US/content/stories/example-story.html).

Bei jedem gegebenen Wert, den Sie in den Cache-Schlüssel einschließen möchten, sollten Sie sicherstellen, dass Sie verstehen, wie viele verschiedene Variationen dieses Werts in Viewer-Anforderungen angezeigt werden können. Bei bestimmten Anforderungswerten ist es selten sinnvoll, sie in den Cache-Schlüssel aufzunehmen. Beispielsweise kann der User-Agent-Header Tausende von eindeutigen Variationen haben, daher ist er im Allgemeinen kein guter Kandidat für die Aufnahme in den Cache-Schlüssel. Cookies, die benutzerspezifische oder sitzungsspezifische Werte aufweisen und über Tausende (oder sogar Millionen) von Anforderungen eindeutig sind, sind auch keine guten Kandidaten für die Aufnahme in Cache-Schlüssel. Wenn Sie diese Werte in den Cache-Schlüssel aufnehmen, führt jede eindeutige Variation zu einer weiteren Kopie des Objekts im Cache. Wenn diese Kopien des Objekts nicht eindeutig sind oder wenn Sie eine so großen Anzahl von leicht unterschiedlichen Objekten haben, dass jedes Objekt nur eine kleine Anzahl von Cache-Treffern erhält, sollten Sie einen anderen Ansatz in Betracht ziehen. Sie können diese hochvariablen Werte aus dem Cache-Schlüssel ausschließen oder Objekte als nicht zwischenspeicherbar markieren.

Seien Sie vorsichtig, wenn Sie den Cache-Schlüssel anpassen. Manchmal ist dies wünschenswert, es kann aber unbeabsichtigte Konsequenzen haben, wie z. B. das Zwischenspeichern von doppelten Objekten, die Verringerung der Cache-Trefferquote und die Erhöhung der Anzahl der Ursprungsanforderungen. Wenn Ihre Ursprungs-Website oder -Anwendung bestimmte Werte von Viewer-Anforderungen für Analysen, Telemetrie oder andere Verwendungszwecke erhalten muss, diese Werte jedoch das vom Ursprung zurückgegebene Objekt nicht ändern, verwenden Sie eine Ursprungsanforderungsrichtlinie um diese Werte in Ursprungsanforderungen einzuschließen, sie aber nicht in den Cache-Schlüssel aufzunehmen.