Cloud CDN, App Hosting'nın web uygulamanız için verdiği desteğin önemli bir parçasıdır. Arka uçunuza yapılan her istek önce Cloud CDN'den geçer. CDN'de önbelleğe alınmış içerikler, web uygulamanızın sunucu kodunu çalıştıran Cloud Run hizmetine gitmeden doğrudan kullanıcıya sunulur. CDN'lerin genel avantajları hakkında daha fazla bilgiyi web.dev adresinde bulabilirsiniz.
Temel Cloud CDN yapılandırması App Hosting tarafından ayarlanır ve değiştirilemez. Ancak sayfa yükleme hızlarını artırmak, faturalandırılan önbelleğe alınmamış içeriği azaltmak ve Cloud Run'a yönelik trafiği en aza indirmek için önbelleğe alma işleminizi optimize etmek üzere yapabileceğiniz çeşitli işlemler vardır.
Önbelleğe alınabilir içerik
Aşağıdaki koşulların TÜMÜ doğruysa Cloud CDN yanıtları önbellekte depolar:
İstek bir GET isteğidir.
Yanıtın durum kodu
200,203,204,206,300,301,302,307,308,404,405,410,421,451veya501.Yanıtta
Cache-Controlüstbilgisi vemax-ageveyas-maxageyönergesi ya da gelecekteki bir zaman damgasıylaExpiresüstbilgisi var.Yanıt,
Ageüstbilgisine veya açık birpublicyönergesi içerenCache-Controlüstbilgisine sahip.Yanıtın boyutu 10 MiB'den küçük veya 10 MiB'ye eşit olmalıdır.
Ayrıca aşağıdakilerden HİÇBİRİ doğru olmamalıdır:
Yanıtta
Set-Cookiebaşlığı varYanıt,
Accept,Accept-Encoding,Access-Control-Request-Headers,Access-Control-Request-Method,Origin,Sec-Fetch-Dest,Sec-Fetch-Mode,Sec-Fetch-Site,X-Goog-Allowed-Resources,X-Origin,RSC,Next-Router-State-Tree,Next-Router-PrefetchveyaNext-Router-Segment-Prefetchdışında bir değere sahipVarybaşlığı içeriyor.Yanıtta
no-storeveyaprivateyönergesini içeren birCache-Controlüstbilgisi var.İstek,
no-storeyönergesi içeren birCache-Controlbaşlığına sahip.Yanıt açık bir önbellek kontrol yönergesi içermediği sürece istekte
Authorizationbaşlığı bulunur.
Önbellek kontrolü yönergeleriyle davranışı özelleştirme
Next.js
Next.js, bir dizi faktöre bağlı olarak önbellek kontrolü yönergelerini örtülü olarak ayarlar. Ancak next.config.js dosyanızda üstbilgiyi manuel olarak ayarlayarak bu ayarları geçersiz kılabilirsiniz. Örneğin, bir sayfanın Cloud CDN'de önbelleğe alınmadığından emin olmak için:
/** @type {import('next').NextConfig} */
const nextConfig = {
headers: async () => [{
source: "/YOUR_PRIVATE_PAGE",
headers: [{
key: "Cache-Control",
value: "private"
}],
}],
};
Angular
Angular SSR, kutudan çıkarıldığında açık önbellek kontrolü yönergeleri ayarlamaz. Sunucu rotalarınızda cache-control üstbilgilerini belirterek kendi üstbilgilerinizi ekleyebilirsiniz. Örneğin, Cloud CDN'nin tüm sayfaları bir saat boyunca önbelleğe almasına izin vermek için:
import { RenderMode, ServerRoute } from '@angular/ssr';
export const serverRoutes: ServerRoute[] = [
{
path: '**',
renderMode: RenderMode.Prerender,
headers: {
'Cache-Control': 'public, max-age=3600',
}
}
];
Belirli bir sayfanın önbelleğe alınmamasını sağlamak için:
import { RenderMode, ServerRoute } from '@angular/ssr';
export const serverRoutes: ServerRoute[] = [
// ... other routes
{
path: 'YOUR_PRIVATE_PAGE',
renderMode: RenderMode.Server,
headers: {
'Cache-Control': 'private',
}
}
];
Dikkate alınan yönergeler
FirebaseApp Hosting'in Cloud CDN örneği aşağıdaki önbellek kontrolü yönergelerine uyar:
| Yönerge | İstek | Yanıt |
|---|---|---|
no-store |
İsteklerde mevcut olduğunda yanıt önbelleğe alınmaz. | no-store içeren yanıtlar önbelleğe alınmaz. |
no-cache |
İstemcilerin, kaynağa yeniden doğrulama başlatmasını veya bunu zorlamasını önlemek için no-cache istek yönergesi yoksayılır. |
no-cache içeren bir yanıt önbelleğe alınır ancak yayınlanmadan önce kaynakla yeniden doğrulanması gerekir. |
public |
Yok | Bu yönerge, önbelleğe alınabilirlik için gerekli değildir ancak proxy'ler tarafından önbelleğe alınması gereken içerikler için eklenmesi önerilir. |
private |
Yok | Yanıt başka bir şekilde önbelleğe alınabilir olarak kabul edilse bile private yönergesi içeren bir yanıt Cloud CDN tarafından önbelleğe alınmaz. İstemciler (ör. tarayıcılar) sonucu önbelleğe almaya devam edebilir. Yanıtların önbelleğe alınmasını önlemek için no-store kullanın. |
max-age=SECONDS |
max-age istek yönergesi yoksayılır. Önbelleğe alınmış bir yanıt, bu başlık istekte yer almıyormuş gibi döndürülür. |
max-age yönergesi içeren bir yanıt, tanımlanan SECONDS süresine kadar önbelleğe alınır. |
s-maxage=SECONDS |
Yok | s-maxage yönergesi içeren bir yanıt, tanımlanan SECONDS süresine kadar önbelleğe alınır. Hem max-age hem de s-maxage varsa Cloud CDN tarafından s‑maxage kullanılır. Bu yönergeye sahip yanıtlar eski olarak sunulmaz. s-max-age (iki kısa çizgi), önbelleğe alma amacıyla geçerli değil. |
max-stale=SECONDS |
max-stale istek yönergesi, istemcinin kabul etmeye istekli olduğu maksimum eskiliği (saniye cinsinden) belirler. Cloud CDN bunu dikkate alır ve yalnızca yanıtın eskiliği max-stale yönergesinden daha azsa eski bir önbelleğe alınmış yanıt döndürür. Aksi takdirde, isteği sunmadan önce yeniden doğrular. |
Yok |
stale-while-revalidate=SECONDS |
Yok | Yeniden doğrulama eşzamanlı olarak gerçekleşirken stale-while-revalidate içeren bir yanıt, istemciye en fazla SANİYE boyunca sunulur. |
must-revalidate |
Yok | must-revalidate içeren bir yanıt, süresi dolduktan sonra kaynak sunucuyla yeniden doğrulanır. Bu yönergeye sahip yanıtlar eski olarak sunulmaz. |
proxy-revalidate |
proxy-revalidate içeren bir yanıt, süresi dolduktan sonra kaynak sunucuyla yeniden doğrulanır. Bu yönergeye sahip yanıtlar eski olarak sunulmaz. |
|
no-transform |
Yok | Cloud CDN tarafından herhangi bir dönüştürme uygulanmaz. |
Önbelleğe alınmış ve alınmamış trafiği ölçme
Firebase Console'daki App Hosting > Kullanım sekmesinde yer alan "Cloud CDN - Giden Bant Genişliği" grafiğinde, sunulan önbelleğe alınmış ve alınmamış baytlar gösterilir. Ayrıca, her kullanıma sunma işlemi için bir işaret bulunur. Bu grafiği, önbellek optimizasyonu çalışmalarınızın etkinliğini ölçmek için kullanabilirsiniz.
Web uygulamanızdaki belirli rotaların önbellek isabet oranını Rota Tabanlı İzleme ile de görüntüleyebilirsiniz.