Gestisci il comportamento della cache

Firebase Hosting utilizza una potente rete CDN globale per rendere il tuo sito il più veloce possibile.

Tutti i contenuti statici richiesti vengono memorizzati automaticamente nella cache sulla CDN. Se reimplementi i contenuti del tuo sito, Firebase Hosting cancella automaticamente tutti i contenuti memorizzati nella cache nella CDN fino alla richiesta successiva.

Tuttavia, poiché i servizi Cloud Functions e Cloud Run generano contenuti dinamicamente, i contenuti di un determinato URL possono variare in base a fattori quali l'input dell'utente o la sua identità. Per tenerne conto, le richieste gestite dal codice di backend non vengono memorizzate nella cache sulla CDN per impostazione predefinita.

Tuttavia, puoi configurare il comportamento della cache per i contenuti dinamici. Ad esempio, se una funzione genera nuovi contenuti solo periodicamente, puoi velocizzare la tua app memorizzando nella cache i contenuti generati per almeno un breve periodo di tempo.

Analogamente, puoi configurare il comportamento di memorizzazione nella cache per ridurre potenzialmente i costi di esecuzione della funzione, in quanto i contenuti vengono pubblicati dalla CDN anziché da una funzione attivata. Scopri di più sull'ottimizzazione dell'esecuzione delle funzioni e dei servizi nella documentazione di Cloud Functions e Cloud Run.

Fanno eccezione le richieste che restituiscono errori 404. La CDN memorizza nella cache la risposta 404 del servizio a un URL inesistente per 10 minuti, in modo che le richieste successive per quell'URL vengano pubblicate dalla CDN. Se modifichi il servizio in modo che i contenuti ora esistano in questo URL, la CDN continua a pubblicare eventuali errori 404 memorizzati nella cache per 10 minuti (massimo) e poi pubblica i contenuti da questo URL normalmente.

Se una risposta 404 contiene già intestazioni di memorizzazione nella cache impostate dal servizio Cloud Functions o Cloud Run, queste sostituiscono il valore predefinito di 10 minuti e determinano completamente il comportamento di memorizzazione nella cache della CDN.

Scopri di più sul comportamento della memorizzazione nella documentazione per gli sviluppatori web di Google.

Imposta Cache-Control

Lo strumento principale che utilizzi per gestire la cache per i contenuti dinamici è l'Cache-Control header. Configurando questo intestazione, puoi comunicare sia al browser sia alla CDN per quanto tempo i tuoi contenuti possono essere memorizzati nella cache. Nella funzione, imposta Cache-Control nel seguente modo:

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

In questa intestazione di esempio, le direttive svolgono tre funzioni:

  • public: contrassegna la cache come public. Ciò significa che sia il browser che i server intermedi (ovvero la CDN per Firebase Hosting) possono memorizzare nella cache i contenuti.

  • max-age: indica al browser e alla CDN per quanti secondi possono memorizzare i contenuti nella cache. Quando il tempo impostato scade, il browser e la CDN devono verificare nuovamente i contenuti con il server di origine. Nell'intestazione di esempio, consente al browser e alla CDN di memorizzare nella cache i contenuti per cinque minuti (vedi s-maxage di seguito per i controlli specifici per la memorizzazione nella cache della CDN).

  • s-maxage: sostituisce la direttiva max-age solo per la memorizzazione nella cache CDN; indica alla CDN per quanti secondi può memorizzare i contenuti nella cache. Quando il tempo impostato scade, la CDN deve convalidare nuovamente i contenuti con il server di origine. Nell'intestazione di esempio, sostituiamo l'impostazione per max-age solo per la CDN e consentiamo alla CDN di memorizzare nella cache i contenuti per dieci minuti.

Per max-age e s-maxage, imposta i valori sul periodo di tempo più lungo per il quale ritieni accettabile che gli utenti ricevano contenuti non aggiornati. Se una pagina cambia ogni pochi secondi, utilizza un valore di tempo ridotto. Tuttavia, altri tipi di contenuti possono essere memorizzati nella cache in tutta sicurezza per ore, giorni o addirittura mesi.

Puoi scoprire di più sull'intestazione Cache-Control sulla Mozilla Developer Network e nella documentazione per gli sviluppatori web di Google.

Quando vengono pubblicati i contenuti memorizzati nella cache?

Il browser e la CDN memorizzano i tuoi contenuti nella cache in base a:

  • Il nome host
  • Il percorso
  • La stringa di query
  • I contenuti delle intestazioni della richiesta specificate nell'intestazione Vary

Intestazioni Vary

L'intestazione Vary determina quali intestazioni di richiesta devono essere utilizzate per fornire una risposta appropriata (se i contenuti memorizzati nella cache sono validi o se devono essere convalidati nuovamente con il server di origine).

Firebase Hosting imposta automaticamente un'intestazione Vary appropriata sulla risposta per situazioni comuni. Nella maggior parte dei casi, non è necessario preoccuparsi dell'intestazione Vary. Tuttavia, in alcuni casi d'uso avanzati, potresti avere altre intestazioni che devi modificare per la cache. In questo caso, puoi impostare l'intestazione Vary nella risposta. Ad esempio:

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

In questo caso, il valore dell'intestazione Vary è:

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

Con queste impostazioni, due richieste altrimenti identiche con intestazioni X-My-Custom-Header diverse vengono memorizzate nella cache separatamente. Tieni presente che Hosting aggiunge Cookie e Authorization all'intestazione Vary per impostazione predefinita quando viene effettuata una richiesta di contenuti dinamici. In questo modo, qualsiasi intestazione di autorizzazione della sessione o dei cookie che utilizzi viene inserita nella chiave cache, il che impedisce la fuga accidentale di contenuti.

Tieni inoltre presente quanto segue:

  • È possibile memorizzare nella cache solo le richieste GET e HEAD. Le richieste HTTPS che utilizzano altri metodi non vengono mai memorizzate nella cache.

  • Fai attenzione quando aggiungi impostazioni all'intestazione Vary. Più impostazioni aggiungi, meno è probabile che la CDN possa pubblicare contenuti memorizzati nella cache. Inoltre, ricorda che Vary si basa sulle intestazioni di richiesta, non sulle intestazioni di risposta.

Utilizzo dei cookie

Quando utilizzi Firebase Hosting insieme a Cloud Functions o Cloud Run, i cookie vengono generalmente rimossi dalle richieste in arrivo. Questo è necessario per consentire un comportamento della cache CDN efficiente. Solo il cookie __session con nome speciale è consentito per l'esecuzione della tua app.

Se presente, il cookie __session viene inserito automaticamente nella chiave della cache, il che significa che è impossibile per due utenti con cookie diversi ricevere la risposta memorizzata nella cache dell'altro. Utilizza il cookie __session solo se la tua app pubblica contenuti diversi a seconda dell'autorizzazione dell'utente.