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
,451
veya501
.Yanıt,
max-age
veyas-maxage
yönergesi içeren birCache-Control
üstbilgisine ya da gelecekteki bir zaman damgası içeren birExpires
üstbilgisine sahip.Yanıt,
Age
başlığına veya açık birpublic
yönergesi içerenCache-Control
başlığına sahip.Yanıtın boyutu 10 MiB'ten küçük veya bu boyuta eşit olmalıdır.
Ayrıca aşağıdakilerden HİÇBİRİ doğru olmamalıdır:
Yanıtın
Set-Cookie
baş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-Prefetch
veyaNext-Router-Segment-Prefetch
dışında bir değere sahipVary
başlığı içeriyor.Yanıtta
no-store
veyaprivate
yönergesini içeren birCache-Control
üstbilgisi var.İstek,
no-store
yönergesine sahip birCache-Control
başlığı içeriyor.Yanıt açık bir önbellek kontrol yönergesi içermediği sürece istekte
Authorization
üstbilgisi 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ça belirtilmiş cache-control 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',
}
}
];
Veya 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',
}
}
];
Uyum sağlanan yönergeler
Firebase'in App Hosting 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 sunulmadan ö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 bu yönergenin eklenmesi en iyi uygulamadır. |
private |
Yok | private yönergesi içeren bir yanıt, başka bir şekilde önbelleğe alınabilir olarak kabul edilse bile 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ı engellemek 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 üstbilgi 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 eski (saniye cinsinden) yanıtı belirler. Cloud CDN bunu dikkate alır ve yalnızca yanıtın eskime süresi max-stale yönergesinden kısaysa 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şzamansız olarak gerçekleşirken stale-while-revalidate içeren bir yanıt, istemciye en fazla SECONDS 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üşüm uygulanmaz. |
Önbelleğe alınmış ve alınmamış trafiği ölçme
App Hosting konsolunun Kullanım sekmesindeki "Cloud CDN - Giden Bant Genişliği" grafiğinde, sunulan önbelleğe alınmış ve alınmamış baytlar gösterilir ve 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.