Firebase Hosting utilizza un potente CDN globale per rendere il tuo sito il più veloce possibile.
Qualsiasi contenuto statico richiesto viene automaticamente memorizzato nella cache della rete CDN . Se ridistribuisci il contenuto del tuo sito, Firebase Hosting cancella automaticamente tutto il contenuto statico memorizzato nella cache attraverso la CDN fino alla richiesta successiva.
Tuttavia, poiché Cloud Functions e i servizi Cloud Run generano il contenuto in modo dinamico, il contenuto per un determinato URL può variare in base a fattori quali l'input dell'utente o l'identità dell'utente. Per tenere conto di ciò, le richieste gestite dal codice di back-end non vengono memorizzate nella cache sulla CDN per impostazione predefinita.
Tuttavia, puoi configurare il comportamento di memorizzazione nella cache per il contenuto dinamico . Ad esempio, se una funzione genera nuovo contenuto solo periodicamente, puoi velocizzare la tua app memorizzando nella cache il contenuto generato per almeno un breve periodo di tempo.
È anche possibile ridurre potenzialmente i costi di esecuzione della funzione perché il contenuto viene servito dalla CDN anziché tramite una funzione attivata. Ulteriori informazioni sull'ottimizzazione dell'esecuzione delle funzioni e dei servizi nella documentazione di Cloud Functions e Cloud Run .
Ulteriori informazioni sul comportamento di memorizzazione nella cache nella documentazione per sviluppatori web di Google.
Imposta il controllo della cache
Lo strumento principale che utilizzi per gestire la cache per il contenuto dinamico è l'intestazione Cache-Control
. Configurando questa intestazione, puoi comunicare sia al browser che alla CDN per quanto tempo i tuoi contenuti possono essere memorizzati nella cache. Nella tua funzione, imposti Cache-Control
modo:
res.set('Cache-Control', 'public, max-age=300, s-maxage=600');
In questo esempio di intestazione, le direttive fanno tre cose:
public
: contrassegna la cache comepublic
. Ciò significa che sia il browser che i server intermedi (ovvero la CDN per Firebase Hosting) possono memorizzare nella cache il contenuto.max-age
: indica al browser e alla rete CDN per quanti secondi possono memorizzare il contenuto nella cache. Allo scadere del tempo impostato, il browser e il CDN devono riconvalidare il contenuto con il server di origine. Nell'intestazione di esempio, stiamo consentendo al browser e alla rete CDN di memorizzare nella cache il contenuto per cinque minuti (vederes-maxage
seguito per i controlli specifici per la memorizzazione nella cache CDN).s-maxage
- Ignora la direttivamax-age
per il caching CDN; dice alla CDN per quanti secondi può memorizzare nella cache il contenuto. Allo scadere del tempo impostato, il CDN deve riconvalidare il contenuto con il server di origine. Nell'intestazione di esempio, stiamo sovrascrivendo l'impostazione permax-age
per la CDN e consentendo alla CDN di memorizzare nella cache il contenuto per dieci minuti.
Per max-age
e s-maxage
, imposta i loro valori sul periodo di tempo più lungo in cui ti senti a tuo agio con gli utenti che ricevono contenuti obsoleti. Se una pagina cambia ogni pochi secondi, usa un piccolo valore temporale. Tuttavia, altri tipi di contenuto possono essere memorizzati nella cache in modo sicuro per ore, giorni o persino mesi.
Puoi saperne di più sull'intestazione Cache-Control
su Mozilla Developer Network e nella documentazione per sviluppatori web di Google.
Quando viene offerto il contenuto memorizzato nella cache?
Il browser e la CDN memorizzano nella cache i tuoi contenuti in base a:
- Il nome host
- Il sentiero
- La stringa di query
- Il contenuto delle intestazioni della richiesta specificate nell'intestazione
Vary
Varia le intestazioni
L' intestazione Vary
determina quali intestazioni della richiesta devono essere utilizzate per fornire una risposta appropriata (se il contenuto memorizzato nella cache è valido o se il contenuto deve essere riconvalidato con il server di origine).
Il più delle volte, non devi preoccuparti dell'intestazione Vary
. Firebase Hosting imposta automaticamente un'intestazione Vary
appropriata sulla tua risposta per situazioni comuni. Ciò include la verifica che qualsiasi cookie di sessione o intestazione di autorizzazione che stai utilizzando faccia parte della chiave della cache, il che previene perdite accidentali di contenuto.
In alcuni casi d'uso avanzati, potresti avere altre intestazioni necessarie per influenzare la cache. In questo caso, puoi semplicemente impostare l'intestazione Vary
sulla tua risposta:
res.set('Vary', 'Accept-Encoding, X-My-Custom-Header');
Con queste impostazioni, due richieste altrimenti identiche con intestazioni X-My-Custom-Header
vengono memorizzate nella cache separatamente.
Utilizzo dei cookie
Quando si utilizza Firebase Hosting insieme a Cloud Functions o Cloud Run, i cookie vengono generalmente rimossi dalle richieste in arrivo. Ciò è necessario per consentire un comportamento efficiente della cache CDN. Solo il cookie __session
nome __session
può passare all'esecuzione della tua app.
Quando è presente, il cookie __session
viene automaticamente __session
nella chiave della cache, il che significa che è impossibile per due utenti con cookie diversi ricevere la risposta dell'altro nella cache. Utilizza il cookie __session
se la tua app offre contenuti diversi a seconda dell'autorizzazione dell'utente.