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ğipublic
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ğıdakis-maxage
bakın).s-maxage
— Yalnızca CDN önbelleğe alma içinmax-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
veHEAD
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ıcaVary
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.