Önbellek davranışını yönet

Firebase Hosting, sitenizi mümkün olduğunca hızlı hale getirmek için güçlü bir küresel CDN kullanır.

İstenen statik içerikler, CDN'de otomatik olarak önbelleğe alınır. Şu durumda: sitenizin içeriğini yeniden dağıtırsanız Firebase Hosting, tüm sitenizi otomatik olarak temizler bir sonraki isteğe kadar CDN'de önbelleğe alınmış içerik.

Ancak Cloud Functions ve Cloud Run hizmetleri içerikleri dinamik olarak oluşturduğundan, belirli bir URL'nin içeriği kullanıcı girişi veya kullanıcının kimliği gibi faktörlere göre değişiklik gösterebilir. Bunu hesaba katmak için, arka uç kodu tarafından işlenenleri CDN'de varsayılan olarak önbelleğe almaz.

Ancak dinamik içerik için önbelleğe alma davranışını yapılandırabilirsiniz. Örneğin, Örneğin, bir işlev yalnızca periyodik olarak yeni içerik oluşturuyorsa bu işlevin hızını uygulamanızı, oluşturulan içeriği en az kısa bir süre için önbelleğe alma.

Benzer şekilde, işlevleri azaltmak için önbelleğe alma davranışını yerine CDN'den yayınlandığı için yürütme maliyetleri tetiklenmiştir. İşlev yürütmeyi ve hizmetleri optimize etme hakkında daha fazla bilgi edinin Cloud Functions ve Cloud Run belgelerinden faydalanabilirsiniz.

404 hataları döndüren istekler istisnadır. CDN, verilerinizi hizmetin mevcut olmayan bir URL'ye 404 yanıtının 10 dakika boyunca güncellenmesini; bu URL'ye yönelik istekler CDN'den sunulur. İçeriğinizin bu URL'de bulunduğu şekilde hizmetinizi değiştirirseniz CDN, önbelleğe alınmış 404'leri en fazla 10 dakika boyunca yayınlamaya devam eder ve ardından içeriği bu URL'den normal şekilde sunar.

Bir 404 yanıtı zaten yöneticiniz tarafından ayarlanan önbelleğe alma üstbilgileri içeriyorsa Cloud Functions veya Cloud Run hizmetinde, 10 dakika olduğunu ve tarayıcının önbelleğe alma davranışını tam olarak CDN'dir.

Google'ın web geliştiricisi belgelerini inceleyin.

Önbellek Denetimini Ayarla

Dinamik içerik önbelleğini yönetmek için kullandığınız ana araç Cache-Control üstbilgisi. Bu üstbilgiyi yapılandırarak her ikisine de önbelleğe alınabileceği süreyi CDN'ye göre değiştirmeniz gerekir. İşlevinizde Cache-Control değerini aşağıdaki gibi ayarlarsınız:

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

Bu örnek üstbilgide, yönergeler üç şey yapar:

  • public: Önbelleği public olarak işaretler. Bu, hem tarayıcının hem de ara sunucular (Firebase Hosting için CDN) önbelleğe alabilir daha iyi olur.

  • max-age — Tarayıcıya ve CDN'ye kaç saniye önbelleğe alabileceğini bildirir daha iyi olur. Ayarlanan süre sona erdiğinde tarayıcı ve CDN, içeriği kaynak sunucuda yeniden doğrulamalıdır. Örnek başlıkta tarayıcının ve CDN'nin içeriği beş dakika boyunca önbelleğe almasına izin vermek (bkz. CDN önbelleğe almayla ilgili belirli kontroller için aşağıda s-maxage bulabilirsiniz).

  • s-maxage: Yalnızca CDN önbelleğe alma için max-age yönergesini geçersiz kılar; CDN'ye içeriği kaç saniye boyunca önbelleğe alabileceğini söyler. Ayarlanan zaman süresi dolarsa CDN, içeriği kaynak sunucuyla yeniden doğrulamalıdır. örnek başlığında, yalnızca CDN için max-age ayarını geçersiz kılıyoruz. ve CDN'nin içeriği on dakika boyunca önbelleğe almasını sağlar.

max-age ve s-maxage için değerlerini en uzun süreye ayarlayın kullanıcıların eski içerik almasından rahatsız olmayacaksınız. Bir sayfa değişirse birkaç saniyede bir, küçük bir zaman değeri kullanın. Ancak diğer içerik türleri saatler, günler, hatta aylar boyunca güvenli bir şekilde önbelleğe alınabilir.

Cache-Control başlığı hakkında daha fazla bilgiyi şurada bulabilirsiniz: Mozilla Geliştirici Ağı ve Google'ın web geliştiricisi belgelerini inceleyin.

Önbelleğe alınan içerik ne zaman sunulur?

Tarayıcı ve CDN, içeriğinizi aşağıdakilere göre önbelleğe alır:

  • Ana makine adı
  • Yol
  • Sorgu dizesi
  • Vary başlığında belirtilen istek başlıklarının içeriği

Vary üstbilgileri

İlgili içeriği oluşturmak için kullanılan Vary üst bilgisi uygun bir istek sağlamak için hangi istek başlıklarının kullanılması gerektiğini belirler yanıtı (önbelleğe alınmış içeriğin geçerli olup olmadığı veya içeriğin kaynak sunucuyla tekrar doğrulanmıştır).

Firebase Hosting, sık karşılaşılan durumlar için yanıtınızda otomatik olarak uygun bir Vary başlığı belirler. Çoğu zaman Vary başlığıyla ilgili endişelenmenize gerek yoktur. Ancak bazı gelişmiş kullanım örneklerinde gereken diğer üstbilgileri kontrol edin. Bu durumda, yanıtınızda Vary üstbilgisini ayarlayabilirsiniz. Örneğin:

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

Bu durumda, Vary üstbilgisinin değeri şu şekildedir:

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

Bu ayarlarla, aksi takdirde farklı olan iki özdeş istek X-My-Custom-Header üstbilgileri ayrı olarak önbelleğe alınır. Hosting şunu ekler: Bir istek olduğunda varsayılan olarak Vary başlığına Cookie ve Authorization eklenir dinamik içerik için tasarlandı. Bu sayede, kullandığınız tüm oturum veya çerez yetkilendirme üstbilgilerinin önbelleğe alma anahtarının bir parçası olması sağlanır. Bu da içeriğin yanlışlıkla sızmasını önler.

Ayrıca şunlara dikkat edin:

  • Yalnızca GET ve HEAD istekleri önbelleğe alınabilir. Diğer kullanıcı verilerini kullanan HTTPS istekleri yöntemler hiçbir zaman önbelleğe alınmaz.

  • Vary üstbilgisine ayar eklerken dikkatli olun. Ne kadar çok ayar eklerseniz CDN'nin önbelleğe alınmış içerik yayınlama olasılığı o kadar azalır. Ayrıca Vary değerinin yanıt yerine istek başlıklarına dayalı olduğunu unutmayın. başlıklar.

Çerezleri kullanma

Firebase Hosting öğesini Cloud Functions veya Cloud Run, çerezler genellikle gelen isteklerden çıkarılır. Bu, verimli CDN önbellek davranışına izin vermek için gereklidir. Yalnızca özel olarak adlandırılmış __session çerezinin yalnızca en verimli şekilde belirleyebilirsiniz.

Mevcut olduğunda __session çerezi otomatik olarak önbellek anahtarının bir parçası haline gelir. Bu, farklı çerezlere sahip iki kullanıcının diğerinin önbelleğe alınmış yanıtını almasının imkansız olduğu anlamına gelir. __session çerezini yalnızca Uygulama, kullanıcı yetkilendirmesine bağlı olarak farklı içerik sunuyor.