Bir Set-Cookie başlığı önbelleğini nasıl mahveder
Introducing Cache Response Rules · Alex Krivit, Anthony Turcios
Cloudflare yeni bir kural tipi duyuruyor: origin sunucusu cevap verdikten sonra, ama Cloudflare içeriği önbelleğe almadan önce çalışan kurallar. Ürün duyurusu ama içindeki HTTP önbellek anlatımı başlı başına iyi bir ders.
Temel model şu: CDN önbelleği ile origin sunucu bir çift olarak çalışır. Amaç mümkün olan her yerde önbellekten cevap vermek ve yalnızca uç (edge) cevap veremediğinde origin'e gitmek. Önbellek isabet oranındaki (cache hit ratio) her puan, bu iş bölümünü doğru kurmaktan geliyor. Gereksiz yere önbelleğe bakarsan zaten ıskalayacak bir arama boşa gider; çok az bakarsan uç katmanın emmesi gereken trafiği origin karşılar ve performans kazancı buharlaşır.
Kritik nokta: origin, önbelleği yönlendirir. Önbelleklenebilir bir varlık döndürdüğünde, cevap başlıkları Cloudflare'e ne kadar süre sunabileceğini, ne zaman ve nasıl yeniden doğrulayacağını, hatta önbelleğe alınıp alınmayacağını söyler. Önbellek ancak origin'i kadar verimlidir.
Yazının çözdüğü problem tam da burada: çoğu önbellek uygunluk sorunu istek anında değil, origin cevap verdikten sonra ortaya çıkar. Klasik senaryo: ziyaretçi /static/app.js ister, önbellek ıskalar, istek origin'e gider ve origin dosyayı döndürürken cevap başlıklarının arasına sessizce bir Set-Cookie sıkışır. Her uç noktada önbelleklenmesi gereken varlık, artık önbelleklenemez hâle gelir.
Öne çıkanlar
- Aynı problemin varyasyonları çok: origin güvenle önbelleklenebilecek varlıklara
Cache-Control: no-cachegönderir, ya da tarayıcı için doğru olan direktifleri CDN'e de yollar. - Bu başlıkları origin'in kendisinde temizlemek çoğu zaman zor, bazen imkânsız — araya giren bir katman gerekiyor.
- Yeni kurallar tam doğru anda çalışıyor: origin cevabından sonra, önbelleğe yazmadan önce.
Neden önemli?
Önbellek isabet oranı, bir web sisteminin en yüksek kaldıraçlı metriklerinden biri: %70'ten %90'a çıkmak origin trafiğini üçte birine indirir. Ve bu oranı bozan şey genelde büyük bir mimari hata değil, yanlışlıkla eklenmiş tek bir başlıktır. Küçük detayların büyük sistemleri belirlemesine iyi bir örnek.
Sende karşılığı
Bunu bugün kendi projende kontrol edebilirsin. Spring Boot'ta session yönetimi açıksa, statik kaynak isteklerine bile Set-Cookie eklenmesi çok yaygın bir hatadır — sonuç: CDN hiçbir şeyi önbelleklemez ve sen sebebini aylarca bulamazsın. Kontrolü basit: curl -I https://siten/static/app.js çalıştır ve cevap başlıklarına bak. Set-Cookie görüyorsan sorun var. KlioAI'nın API'sinde de aynısını yap: Cache-Control başlıklarını bilinçli ayarla — değişmeyen varlıklara uzun max-age, kullanıcıya özel cevaplara private, no-store. Bu ayrımı yapmamak, ya performans ya da güvenlik kaybettirir.
Sözlük
- cache hit ratio önbellek isabet oranı
- Toplam isteklerin yüzde kaçının önbellekten karşılandığı; CDN verimliliğinin ana ölçüsü.
- origin server kaynak sunucu
- İçeriğin asıl üretildiği sunucu; CDN önbellekleyemediğinde isteği buraya iletir.
- Cache-Control Cache-Control başlığı
- Bir cevabın ne kadar süre, kim tarafından ve nasıl önbelleklenebileceğini belirten HTTP başlığı.
- revalidation yeniden doğrulama
- Önbellekteki kopyanın hâlâ güncel olup olmadığını origin'e sorup, güncelse tam içeriği indirmeden kullanma.