Gestisci il comportamento della cache

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 CDN . Se ridistribuisci il contenuto del tuo sito, Firebase Hosting cancella automaticamente tutti i contenuti memorizzati nella cache della CDN fino alla richiesta successiva.

Tuttavia, poiché i servizi Cloud Functions e Cloud Run generano contenuti in modo dinamico, il contenuto di 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 backend non vengono memorizzate nella cache della CDN per impostazione predefinita.

Puoi, tuttavia, 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 il contenuto generato almeno per un breve periodo di tempo.

Allo stesso modo puoi configurare il comportamento della memorizzazione nella cache per ridurre potenzialmente i costi di esecuzione della funzione perché il contenuto viene servito 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 .

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 servite dalla CDN. Se modifichi il servizio in modo che il contenuto ora esista in questo URL, la CDN continua a servire tutti i 404 memorizzati nella cache per 10 minuti (al massimo), quindi fornisce normalmente il contenuto da quell'URL.

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

Ulteriori informazioni sul comportamento della memorizzazione nella cache sono disponibili nella documentazione per gli sviluppatori web di Google.

Imposta il controllo della cache

Lo strumento principale utilizzato 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 in questo modo:

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

In questa intestazione di esempio, le direttive fanno tre cose:

  • 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 il contenuto.

  • max-age : indica al browser e al CDN per quanti secondi possono memorizzare nella cache il contenuto. Allo scadere del tempo impostato, il browser e la CDN devono riconvalidare il contenuto con il server di origine. Nell'intestazione dell'esempio, consentiamo al browser e alla CDN di memorizzare nella cache il contenuto per cinque minuti (vedi s-maxage di seguito per controlli specifici per la memorizzazione nella cache della CDN).

  • s-maxage — Sostituisce la direttiva max-age solo per il caching della CDN; indica al CDN per quanti secondi può memorizzare nella cache il contenuto. Allo scadere del tempo impostato, la CDN deve riconvalidare il contenuto presso il server di origine. Nell'intestazione dell'esempio, sovrascriviamo l'impostazione relativa max-age solo per la CDN e consentiamo alla CDN di memorizzare nella cache il contenuto per dieci minuti.

Per max-age e s-maxage , imposta i valori sul periodo di tempo più lungo in cui sei a tuo agio con gli utenti che ricevono contenuti obsoleti. Se una pagina cambia ogni pochi secondi, utilizza un valore temporale piccolo. Tuttavia, altri tipi di contenuti possono essere memorizzati nella cache in modo sicuro per ore, giorni o addirittura mesi.

Puoi trovare ulteriori informazioni sull'intestazione Cache-Control su Mozilla Developer Network e nella documentazione per sviluppatori web di Google.

Quando viene servito 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

Variare le intestazioni

L' intestazione Vary determina quali intestazioni di 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).

Firebase Hosting imposta automaticamente un'intestazione Vary appropriata sulla tua risposta per le situazioni comuni. Nella maggior parte dei casi non devi preoccuparti dell'intestazione Vary . Tuttavia, in alcuni casi d'uso avanzati, potresti avere altre intestazioni necessarie per influenzare la cache. In tal caso, puoi impostare l'intestazione Vary nella tua risposta. Per 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 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 per contenuto dinamico. Ciò garantisce che qualsiasi intestazione di sessione o di autorizzazione dei cookie utilizzata faccia parte della chiave di cache, impedendo perdite accidentali di contenuto.

Notare inoltre:

  • È 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 servire il contenuto memorizzato nella cache. Ricorda inoltre che Vary si basa sulle intestazioni di richiesta , non sulle intestazioni di risposta .

Utilizzo dei cookie

Quando si utilizza Firebase Hosting insieme a Cloud Functions o Cloud Run, i cookie vengono generalmente rimossi dalle richieste in entrata. Ciò è necessario per consentire un comportamento efficiente della cache CDN. Solo il cookie __session dal nome speciale può passare attraverso l'esecuzione della tua app.

Quando presente, il cookie __session viene automaticamente integrato nella chiave di 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 offre contenuti diversi a seconda dell'autorizzazione dell'utente.