Önbellek davranışını yönet

Firebase Hosting, sitenizi olabildiğince hızlı hale getirmek için güçlü bir küresel CDN kullanır.

İstenen herhangi bir statik içerik otomatik olarak CDN'de önbelleğe alınır . Sitenizin içeriğini yeniden dağıtırsanız Firebase Hosting, bir sonraki isteğe kadar CDN'de önbelleğe alınmış tüm statik içeriğinizi otomatik olarak temizler.

Ancak, Cloud Functions ve Cloud Run hizmetleri dinamik olarak içerik oluşturduğundan, belirli bir URL'nin içeriği, kullanıcı girdisi veya kullanıcının kimliği gibi şeylere bağlı olarak değişiklik gösterebilir. Bunu hesaba katmak için, arka uç kodu tarafından işlenen istekler, 404 hatası döndüren istekler dışında varsayılan olarak CDN'de önbelleğe alınmaz . Önbelleğe alınmış 404 sonuçlarını temizlemek için Firebase Hosting'i yeniden konuşlandırın; Cloud Functions ve Cloud Run'ın yeniden dağıtılması önbelleği otomatik olarak geçersiz kılmaz .

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

İçerik, tetiklenen bir işlev yerine CDN'den sunulduğu için işlev yürütme maliyetlerini de potansiyel olarak azaltabilirsiniz. Cloud Functions ve Cloud Run belgelerinde işlev yürütmeyi ve hizmetleri optimize etme hakkında daha fazla bilgi edinin.

Google'ın web geliştirici belgelerinde önbelleğe alma davranışı hakkında daha fazla bilgi edinin.

Önbellek Denetimini Ayarla

Dinamik içerik için önbelleği yönetmek için kullandığınız ana araç Cache-Control başlığıdır. Bu başlığı yapılandırarak içeriğinizin ne kadar süreyle önbelleğe alınabileceğini hem tarayıcıya hem de CDN'ye iletebilirsiniz. İşlevinizde, Cache-Control şu şekilde ayarlarsınız:

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

Bu örnek başlıkta, direktifler üç şey yapar:

  • public — Önbelleği public olarak işaretler. Bu, hem tarayıcının hem de ara sunucuların (Firebase Barındırma için CDN anlamına gelir) içeriği önbelleğe alabileceği anlamına gelir.

  • max-age — Tarayıcıya ve CDN'ye içeriği kaç saniye önbelleğe alabileceklerini söyler. Ayarlanan süre sona erdiğinde, tarayıcı ve CDN, içeriği kaynak sunucuyla 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 veriyoruz (CDN önbelleğe alma için belirli kontroller için aşağıdaki s-maxage bakın).

  • 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 önbelleğe alabileceğini söyler. Ayarlanan süre sona erdiğinde, CDN'nin içeriği kaynak sunucuyla yeniden doğrulaması gerekir. Örnek başlıkta, max-age ayarını yalnızca CDN için geçersiz kılıyoruz ve CDN'nin içeriği on dakika boyunca önbelleğe almasına izin veriyoruz.

max-age ve s-maxage için değerlerini, kullanıcıların eski içerik alması konusunda rahat olduğunuz en uzun süreye ayarlayın. Bir sayfa birkaç saniyede bir değişiyorsa, küçük bir zaman değeri kullanın. Ancak, diğer içerik türleri saatlerce, günlerce ve hatta aylarca güvenle önbelleğe alınabilir.

Mozilla Geliştirici Ağı'nda ve Google'ın web geliştirici belgelerinde Cache-Control başlığı hakkında daha fazla bilgi edinebilirsiniz.

Ö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 bilgisayar adı
  • Yol
  • sorgu dizesi
  • Vary başlığında belirtilen istek başlıklarının içeriği

Çeşitli başlıklar

Vary başlığı, uygun bir yanıt sağlamak için hangi istek başlıklarının kullanılması gerektiğini belirler (önbelleğe alınan içeriğin geçerli olup olmadığı veya içeriğin kaynak sunucuyla yeniden doğrulanması gerekip gerekmediği).

Firebase Hosting, yaygın durumlar için yanıtınıza otomatik olarak uygun bir Vary başlığı ayarlar. Çoğu zaman, Vary başlığı hakkında endişelenmenize gerek yoktur. Ancak, bazı gelişmiş kullanım durumlarında, önbelleği etkilemek için ihtiyaç duyduğunuz başka başlıklarınız olabilir. Bu durumda, yanıtınızda Vary başlığını ayarlayabilirsiniz. Örneğin:

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

Bu durumda, Vary başlığının değeri şu şekildedir:

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

Bu ayarlarla, farklı X-My-Custom-Header başlıklarına sahip iki özdeş istek ayrı olarak önbelleğe alınır. Dinamik içerik için bir istek yapıldığında Hosting'in varsayılan olarak Vary başlığına Cookie ve Authorization eklediğini unutmayın. Bu, kullandığınız herhangi bir oturum veya tanımlama bilgisi yetkilendirme başlığının önbellek anahtarının bir parçası olmasını sağlar ve bu da yanlışlıkla içerik sızıntısını önler.

Ayrıca not:

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

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

Çerezleri kullanma

Firebase Hosting'i Cloud Functions veya Cloud Run ile birlikte kullanırken, tanımlama bilgileri genellikle gelen isteklerden çıkarılır. Bu, verimli CDN önbellek davranışına izin vermek için gereklidir. Yalnızca özel olarak adlandırılan __session tanımlama bilgisinin uygulamanızın yürütülmesine geçmesine izin verilir.

Mevcut olduğunda, __session çerezi otomatik olarak önbellek anahtarının bir parçası yapılır, yani farklı çerezlere sahip iki kullanıcının diğerinin önbelleğe alınmış yanıtını alması imkansızdır. __session tanımlama bilgisini yalnızca, uygulamanız kullanıcı yetkilendirmesine bağlı olarak farklı içerikler sunuyorsa kullanın.