Firebase Hosting utilizza una potente CDN globale per rendere il tuo sito il più veloce possibile.
Qualsiasi contenuto statico richiesto viene automaticamente memorizzato nella cache sulla CDN. Se esegui di nuovo il deployment dei 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 tenere conto di questo, le richieste gestite dal codice di backend non vengono memorizzate nella cache sulla CDN per impostazione predefinita.
Tuttavia, puoi configurare il comportamento di memorizzazione nella 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.
Allo stesso modo, puoi configurare il comportamento di memorizzazione nella cache per ridurre potenzialmente i costi di esecuzione della funzione, perché i contenuti vengono pubblicati dalla CDN anziché da una funzione attivata. Scopri di più sull'ottimizzazione dell'esecuzione di funzioni e servizi nella documentazione di Cloud Functions e Cloud Run.
L'eccezione riguarda le richieste che restituiscono errori 404. La CDN memorizza nella cache la risposta 404 del tuo servizio a un URL inesistente per 10 minuti, in modo che le richieste successive per quell'URL vengano gestite dalla CDN. Se modifichi il servizio in modo che i contenuti ora esistano a questo URL, la CDN continua a pubblicare eventuali errori 404 memorizzati nella cache per 10 minuti (al massimo), quindi pubblica normalmente i contenuti da quell'URL.
Se una risposta 404 contiene già intestazioni di memorizzazione nella cache impostate dal tuo 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 di memorizzazione nella cache nella documentazione per gli sviluppatori web di Google.
Imposta Cache-Control
Lo strumento principale che utilizzi per gestire la cache dei contenuti dinamici è l'intestazione
Cache-Control
. Configurando questa intestazione, puoi comunicare sia al browser sia alla CDN per quanto tempo i tuoi contenuti possono essere memorizzati nella cache. Nella tua funzione,
imposti 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 comepublic
. Ciò significa che sia il browser sia 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 nella cache i contenuti. Allo scadere del tempo impostato, il browser e la CDN devono convalidare nuovamente i contenuti con il server di origine. Nell'intestazione di esempio, consentiamo al browser e alla CDN di memorizzare nella cache i contenuti per cinque minuti (vedis-maxage
di seguito per i controlli specifici per la memorizzazione nella cache della CDN).s-maxage
: esegue l'override della direttivamax-age
solo per la memorizzazione nella cache della CDN; indica alla CDN per quanti secondi può memorizzare nella cache i contenuti. Quando scade il tempo impostato, la CDN deve convalidare nuovamente i contenuti con il server di origine. Nell'intestazione di esempio, eseguiamo l'override dell'impostazione permax-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
che ritieni accettabile per la ricezione di contenuti obsoleti da parte degli utenti. Se una pagina cambia
ogni pochi secondi, utilizza un valore di tempo ridotto. Tuttavia, altri tipi di contenuti possono
essere memorizzati nella cache in modo sicuro per ore, giorni o persino mesi.
Puoi scoprire di più sull'intestazione Cache-Control
nella
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 contenuti nella cache in base a:
- Il nome host
- Il percorso
- La stringa di query
- Il contenuto delle intestazioni delle richieste specificate nell'intestazione
Vary
Intestazioni Vary
L'intestazione
Vary
determina quali intestazioni della 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 nella tua
risposta per le situazioni comuni. Il più delle volte non devi preoccuparti
dell'intestazione Vary
. Tuttavia, in alcuni casi d'uso avanzati, potresti avere
altre intestazioni che devono influire sulla 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 di sessione o cookie
utilizzata viene inclusa nella chiave cache, il che impedisce perdite accidentali
di contenuti.
Tieni presente anche:
È possibile memorizzare nella cache solo le richieste
GET
eHEAD
. 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. Ricorda inoltre cheVary
si basa sulle intestazioni delle richieste, non su quelle delle risposte.
Utilizzo dei cookie
Quando utilizzi Firebase Hosting insieme a Cloud Functions o
Cloud Run, i cookie vengono generalmente rimossi dalle richieste in entrata. Questo
è necessario per consentire un comportamento della cache della CDN efficiente.
Solo il cookie __session
con nome speciale può essere trasferito all'esecuzione dell'app.
Se presente, il cookie __session
viene automaticamente incluso 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 utente.