Cache-Verhalten verwalten

Firebase Hosting nutzt ein leistungsstarkes globales CDN, um Ihre Website so schnell wie möglich zu machen.

Alle angeforderten statischen Inhalte werden automatisch im CDN zwischengespeichert . Wenn Sie den Inhalt Ihrer Website erneut bereitstellen, löscht Firebase Hosting bis zur nächsten Anfrage automatisch alle zwischengespeicherten Inhalte im gesamten CDN.

Da Cloud Functions- und Cloud Run-Dienste jedoch Inhalte dynamisch generieren, kann der Inhalt für eine bestimmte URL je nach Benutzereingabe oder Benutzeridentität variieren. Um dies zu berücksichtigen, werden Anfragen, die vom Backend-Code verarbeitet werden, standardmäßig nicht im CDN zwischengespeichert.

Sie können jedoch das Caching-Verhalten für dynamische Inhalte konfigurieren . Wenn eine Funktion beispielsweise nur in regelmäßigen Abständen neue Inhalte generiert, können Sie Ihre App beschleunigen, indem Sie die generierten Inhalte zumindest für einen kurzen Zeitraum zwischenspeichern.

Sie können das Caching-Verhalten auf ähnliche Weise konfigurieren, um möglicherweise die Kosten für die Funktionsausführung zu senken, da der Inhalt vom CDN und nicht von einer ausgelösten Funktion bereitgestellt wird. Weitere Informationen zur Optimierung der Funktionsausführung und Dienste finden Sie in der Dokumentation zu Cloud Functions und Cloud Run .

Die Ausnahme bilden Anfragen, die 404-Fehler zurückgeben. Das CDN speichert die 404-Antwort Ihres Dienstes auf eine nicht vorhandene URL 10 Minuten lang im Cache, sodass nachfolgende Anfragen für diese URL über das CDN bedient werden. Wenn Sie Ihren Dienst so ändern, dass Inhalte jetzt unter dieser URL vorhanden sind, stellt das CDN weiterhin alle zwischengespeicherten 404-Fehler für höchstens 10 Minuten bereit und stellt dann Inhalte von dieser URL normal bereit.

Wenn eine 404-Antwort bereits Caching-Header enthält, die von Ihrem Cloud Functions- oder Cloud Run-Dienst festgelegt wurden, überschreiben diese den Standardwert von 10 Minuten und bestimmen vollständig das Caching-Verhalten des CDN.

Weitere Informationen zum Caching-Verhalten finden Sie in der Dokumentation für Webentwickler von Google.

Cache-Kontrolle einstellen

Das wichtigste Tool, mit dem Sie den Cache für dynamische Inhalte verwalten, ist der Cache-Control Header. Durch die Konfiguration dieses Headers können Sie sowohl dem Browser als auch dem CDN mitteilen, wie lange Ihre Inhalte zwischengespeichert werden können. In Ihrer Funktion legen Sie Cache-Control wie folgt fest:

res.set('Cache-Control', 'public, max-age=300, s-maxage=600');

In diesem Beispielheader bewirken die Anweisungen drei Dinge:

  • public – Markiert den Cache als public . Das bedeutet, dass sowohl der Browser als auch die Zwischenserver (also das CDN für Firebase Hosting) den Inhalt zwischenspeichern können.

  • max-age – Teilt dem Browser und dem CDN mit, wie viele Sekunden sie den Inhalt zwischenspeichern können. Wenn die festgelegte Zeit abgelaufen ist, müssen der Browser und das CDN den Inhalt erneut beim Ursprungsserver validieren. Im Beispiel-Header erlauben wir dem Browser und dem CDN, den Inhalt fünf Minuten lang zwischenzuspeichern (siehe s-maxage unten für spezifische Steuerelemente für das CDN-Caching).

  • s-maxage – Überschreibt die max-age Anweisung nur für das CDN-Caching; teilt dem CDN mit, wie viele Sekunden es den Inhalt zwischenspeichern kann. Wenn die festgelegte Zeit abgelaufen ist, muss das CDN den Inhalt erneut beim Ursprungsserver validieren. Im Beispiel-Header überschreiben wir die Einstellung für max-age nur für das CDN und erlauben dem CDN, den Inhalt zehn Minuten lang zwischenzuspeichern.

Legen Sie die Werte für max-age und s-maxage auf die längste Zeitspanne fest, die für Sie akzeptabel ist, damit Benutzer veraltete Inhalte erhalten. Wenn sich eine Seite alle paar Sekunden ändert, verwenden Sie einen kleinen Zeitwert. Andere Arten von Inhalten können jedoch sicher über Stunden, Tage oder sogar Monate zwischengespeichert werden.

Weitere Informationen zum Cache-Control Header finden Sie im Mozilla Developer Network und in der Webentwicklerdokumentation von Google.

Wann werden zwischengespeicherte Inhalte bereitgestellt?

Der Browser und das CDN speichern Ihre Inhalte im Cache basierend auf:

  • Der Hostname
  • Der Weg
  • Die Abfragezeichenfolge
  • Der Inhalt der im Vary Header angegebenen Anforderungsheader

Variieren Sie die Überschriften

Der Vary Header bestimmt, welche Anforderungsheader verwendet werden sollen, um eine entsprechende Antwort bereitzustellen (ob der zwischengespeicherte Inhalt gültig ist oder ob der Inhalt beim Ursprungsserver erneut validiert werden soll).

Firebase Hosting legt in häufigen Situationen automatisch einen entsprechenden Vary Header für Ihre Antwort fest. In den meisten Fällen müssen Sie sich um den Vary Header keine Sorgen machen. In einigen fortgeschrittenen Anwendungsfällen benötigen Sie jedoch möglicherweise andere Header, um den Cache zu beeinflussen. In diesem Fall können Sie den Vary Header für Ihre Antwort festlegen. Zum Beispiel:

res.set('Vary', 'Accept-Encoding, X-My-Custom-Header');

In diesem Fall ist der Wert des Vary -Headers:

vary: X-My-Custom-Header, x-fh-requested-host, accept-encoding, cookie, authorization

Mit diesen Einstellungen werden zwei ansonsten identische Anfragen mit unterschiedlichen X-My-Custom-Header Headern separat zwischengespeichert. Beachten Sie, dass Hosting standardmäßig Cookie und Authorization zum Vary Header hinzufügt, wenn eine Anforderung für dynamischen Inhalt gestellt wird. Dadurch wird sichergestellt, dass alle von Ihnen verwendeten Sitzungs- oder Cookie-Autorisierungsheader Teil des Cache-Schlüssels werden, wodurch ein versehentliches Durchsickern von Inhalten verhindert wird.

Beachten Sie außerdem:

  • Nur GET und HEAD Anfragen können zwischengespeichert werden. HTTPS-Anfragen, die andere Methoden verwenden, werden niemals zwischengespeichert.

  • Seien Sie vorsichtig, wenn Sie Einstellungen zum Vary Header hinzufügen. Je mehr Einstellungen Sie hinzufügen, desto unwahrscheinlicher ist es, dass das CDN zwischengespeicherte Inhalte bereitstellen kann. Denken Sie auch daran, dass Vary auf Anforderungsheadern und nicht auf Antwortheadern basiert.

Verwendung von Cookies

Wenn Sie Firebase Hosting zusammen mit Cloud Functions oder Cloud Run verwenden, werden Cookies im Allgemeinen aus eingehenden Anfragen entfernt. Dies ist notwendig, um ein effizientes CDN- Cache-Verhalten zu ermöglichen. Nur das speziell benannte __session Cookie darf zur Ausführung Ihrer App weitergeleitet werden.

Wenn vorhanden, wird das __session Cookie automatisch zu einem Teil des Cache-Schlüssels gemacht, was bedeutet, dass es für zwei Benutzer mit unterschiedlichen Cookies unmöglich ist, die zwischengespeicherte Antwort des anderen zu erhalten. Verwenden Sie das __session Cookie nur, wenn Ihre App je nach Benutzerautorisierung unterschiedliche Inhalte bereitstellt.