Firebase Hosting, sitenizin mümkün olduğunca hızlı olması için güçlü bir global CDN kullanır.
İstenen statik içerikler CDN'de otomatik olarak önbelleğe alınır. Sitenizin içeriğini yeniden dağıtırsanız Firebase Hosting, bir sonraki isteğe kadar CDN'deki tüm önbelleğe alınmış içeriğinizi otomatik olarak temizler.
Ancak Cloud Functions ve Cloud Run hizmetleri içeriği 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 bağlı olarak değişebilir. Bunu hesaba katmak için arka uç kodu tarafından işlenen istekler varsayılan olarak CDN'de önbelleğe alınmaz.
Ancak dinamik içerik için önbelleğe alma davranışını yapılandırabilirsiniz. Örneğin, bir işlev yalnızca belirli aralıklarla yeni içerik oluşturuyorsa oluşturulan içeriği kısa bir süre için önbelleğe alarak uygulamanızı hızlandırabilirsiniz.
Benzer şekilde, içeriğin tetiklenen bir işlevden değil CDN'den sunulması nedeniyle işlev yürütme maliyetlerini düşürmek için önbelleğe alma davranışını yapılandırabilirsiniz. Cloud Functions ve Cloud Run dokümanlarında işlev yürütme ve hizmetleri optimize etme hakkında daha fazla bilgi edinin.
404 hatası döndüren istekler bu durumun istisnasıdır. CDN, hizmetinizin 404 yanıtını 10 dakika boyunca var olmayan bir URL için önbelleğe alır. Böylece, bu URL'ye yönelik sonraki istekler CDN'den sunulur. Hizmetinizi değiştirirseniz ve içerik artık bu URL'de yer alırsa CDN, önbelleğe alınmış 404'leri en fazla 10 dakika boyunca yayınlamaya devam eder ve ardından bu URL'deki içeriği normal şekilde yayınlar.
404 yanıtı, Cloud Functions veya Cloud Run hizmetiniz tarafından ayarlanmış önbelleğe alma üstbilgileri içeriyorsa bu üstbilgiler 10 dakikalık varsayılan süreyi geçersiz kılar ve CDN'nin önbelleğe alma davranışını tamamen belirler.
Google'ın web geliştirici belgelerinde önbelleğe alma davranışı hakkında daha fazla bilgi edinin.
Önbellek denetimini ayarlama
Dinamik içeriklerin önbelleğini yönetmek için kullandığınız temel araç Cache-Control
üstbilgisidir. Bu üstbilgiyi yapılandırarak hem tarayıcıya hem de CDN'ye içeriğinizin ne kadar süreyle önbelleğe alınabileceğini bildirebilirsiniz. İşlevinizde Cache-Control
değerini şu şekilde ayarlarsınız:
res.set('Cache-Control', 'public, max-age=300, s-maxage=600');
Bu örnek üstbilgide, yönergeler üç işlem yapar:
public
— Önbelleğipublic
olarak işaretler. Bu, hem tarayıcının hem de ara sunucuların (Firebase Hosting 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 boyunca önbelleğe alabileceklerini bildirir. Belirlenen süre sona erdiğinde tarayıcı ve CDN, içeriği kaynak sunucuyla yeniden doğrulamalıdır. Örnek üstbilgide, tarayıcının ve CDN'nin içeriği beş dakika boyunca önbelleğe almasına izin veriyoruz (CDN önbelleğe alma ile ilgili belirli kontroller için aşağıdakis-maxage
bölümüne 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 bildirir. Belirlenen süre dolduğunda CDN, içeriği kaynak sunucuyla yeniden doğrulamalıdır. Örnek başlıktakimax-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 veya hatta aylarca güvenli bir şekilde önbelleğe alınabilir.
Cache-Control
üstbilgisi hakkında daha fazla bilgiyi Mozilla Developer Network ve Google'ın web geliştirici belgelerinde bulabilirsiniz.
Önbelleğe alınmış içerik ne zaman sunulur?
Tarayıcı ve CDN, içeriğinizi şu ölçütlere 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
Vary
üstbilgisi, uygun bir yanıt sağlamak için hangi istek üstbilgilerinin kullanılması gerektiğini (önbelleğe alınmış içeriğin geçerli olup olmadığı veya içeriğin kaynak sunucuyla yeniden doğrulanması gerekip gerekmediği) belirler.
Firebase Hosting, sık karşılaşılan durumlarda yanıtınıza otomatik olarak uygun bir Vary
başlık ekler. Çoğu zaman Vary
başlığıyla ilgili endişelenmenize gerek yoktur. Ancak bazı gelişmiş kullanım alanlarında, önbelleği etkilemeniz gereken başka başlıklar olabilir. Bu durumda, yanıtınızda Vary
üstbilgisini ayarlayabilirsiniz. Örneğin:
res.set('Vary', 'Accept-Encoding, X-My-Custom-Header');
Bu durumda, Vary
başlığının değeri şudur:
vary: X-My-Custom-Header, x-fh-requested-host, accept-encoding, cookie, authorization
Bu ayarlar sayesinde, farklı X-My-Custom-Header
başlıklarına sahip, aksi takdirde aynı olan iki istek ayrı ayrı önbelleğe alınır. Dinamik içerik isteğinde bulunulduğunda Hosting, Cookie
ve Authorization
değerlerini varsayılan olarak Vary
üstbilgisine ekler. Bu, kullandığınız tüm oturum veya çerez yetkilendirme üstbilgisinin önbellek anahtarına dahil edilmesini sağlayarak içeriklerin yanlışlıkla sızdırılmasını önler.
Ayrıca:
Yalnızca
GET
veHEAD
istekleri önbelleğe alınabilir. Diğer yöntemlerin kullanıldığı HTTPS istekleri hiçbir zaman önbelleğe alınmaz.Vary
üstbilgisine ayar eklerken dikkatli olun. Eklediğiniz ayar sayısı arttıkça CDN'nin önbelleğe alınmış içerik yayınlama olasılığı azalır. AyrıcaVary
değerinin yanıt başlıklarına değil, istek başlıklarına dayandığını unutmayın.
Çerezleri kullanma
Firebase Hosting, Cloud Functions veya Cloud Run ile birlikte kullanıldığında çerezler genellikle gelen isteklerden kaldırılır. Bu, verimli CDN önbellek davranışına izin vermek için gereklidir.
Yalnızca özel olarak adlandırılmış __session
çerezinin, 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ı haline gelir. Bu da 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. Yalnızca uygulamanız kullanıcı yetkilendirmesine bağlı olarak farklı içerikler sunuyorsa __session
çerezini kullanın.