- Konu sahibi
- #1
Cache, Türkçede önbellek, daha önce alınan veya hesaplanan veriyi sonraki kullanım için saklama mekanizmasıdır. Web sitelerinde tarayıcı, sunucu ve CDN gibi katmanlarda kullanılabilir. Amaç, aynı içeriği her istekte baştan üretme veya aktarma ihtiyacını azaltmaktır. Bunun yararı, saklanan kopyanın istenen içerikle eşleşmesine ve doğru kurallarla kullanılmasına bağlıdır.
HTTP önbelleği bir isteğe ait yanıtı saklar. Uygulama içinde ise hesaplanmış veriler de ayrıca önbelleğe alınabilir. Bu yüzden “cache'i temizledim” derken hangi kayıtların, nereden kaldırıldığını belirtmek gerekir.
Bu katmanlar birlikte çalışabilir. Tarayıcıdaki kopyayı kaldırmak, CDN'deki kopyayı kaldırmaz. CDN temizliği de uygulamanın kendi tuttuğu veriyi kendiliğinden yenilemeyebilir.
Sepet, hesap veya kişiye özel ekranlar ortak önbellekte başka kullanıcılara sunulmamalıdır. Hiç saklanmaması gereken hassas yanıtlarda
Statik dosya değiştiğinde URL'ye sürüm veya içerik özeti eklemek yaygın bir yöntemdir. Örneğin
Cache nasıl çalışır?
Örneğin tarayıcı birstyle.css dosyasını aldıktan sonra yanıtın kuralları izin veriyorsa bir kopyasını saklayabilir. Sonraki istekte bu kopya tazeyse ve yeniden kullanım koşulları sağlanıyorsa dosyayı tekrar indirmesi gerekmez. Sunucu veya CDN önbelleğinde ise ziyaretçi yine bir sunucuya bağlanır; hazır yanıtın kullanılması kaynak uygulamanın çalışmasını azaltabilir.HTTP önbelleği bir isteğe ait yanıtı saklar. Uygulama içinde ise hesaplanmış veriler de ayrıca önbelleğe alınabilir. Bu yüzden “cache'i temizledim” derken hangi kayıtların, nereden kaldırıldığını belirtmek gerekir.
Web sitesinde hangi önbellekler bulunabilir?
Aşağıdaki başlıklar tek bir sınıflandırmanın birbirini dışlayan seçenekleri değildir. Sayfa önbelleği, uygulama veya CDN katmanında da bulunabilir.| Önbellek | Bulunduğu yer | Saklanan bilgiye örnek |
|---|---|---|
| Tarayıcı önbelleği | Ziyaretçinin cihazı | CSS, JavaScript, görsel ve uygun HTTP yanıtları |
| Uygulama önbelleği | Uygulamanın kullandığı bellek veya depolama | Yeniden hesaplanması yerine tekrar kullanılan veriler |
| Sayfa önbelleği | Sunucu, eklenti veya ara katman | Daha önce üretilmiş HTML çıktısı |
| Paylaşımlı önbellek | Reverse proxy veya CDN gibi ara sunucular | Birden fazla kullanıcıya sunulabilen yanıtlar |
Bu katmanlar birlikte çalışabilir. Tarayıcıdaki kopyayı kaldırmak, CDN'deki kopyayı kaldırmaz. CDN temizliği de uygulamanın kendi tuttuğu veriyi kendiliğinden yenilemeyebilir.
Cache-Control başlığı neyi belirler?
Cache-Control, HTTP yanıtının saklanması ve yeniden kullanılması için kurallar taşır. Sık karşılaşılan yanıt yönergeleri şunlardır:max-age: Yanıtın yaşı belirtilen süreyi aşana kadar taze sayılmasını sağlar. Süre saniyedir; her indirmede sıfırdan başlamaz.no-cache: Saklamayı yasaklamaz; saklanan yanıt yeniden kullanılmadan önce kaynak sunucuyla doğrulanmalıdır.no-store: Yanıtın HTTP önbelleğine kaydedilmemesini ister. Aynı URL için önceden saklanmış kopyaları otomatik silmez.private: Yanıtın paylaşımlı HTTP önbelleğinde saklanmasını engeller; tarayıcıdaki özel önbellekte saklanmasına izin verebilir.
ETag veya Last-Modified kullanılabilir. İçerik değişmemişse sunucu 304 Not Modified döndürerek mevcut gövdenin yeniden kullanılmasını sağlayabilir. Bu durumda ağ isteği yapılmıştır; yalnızca dosyanın tamamı tekrar aktarılmamıştır.Sepet, hesap veya kişiye özel ekranlar ortak önbellekte başka kullanıcılara sunulmamalıdır. Hiç saklanmaması gereken hassas yanıtlarda
no-store değerlendirilir. Ayrıca kullanılan CDN ve uygulama önbelleğinin kendi kuralları kontrol edilmelidir; yalnız başlık eklemek, özel bir önbellek yapılandırmasının doğru olduğunu kanıtlamaz.Değişiklik yaptığım hâlde neden eski içerik görünüyor?
Eski kopya bir önbellekten geliyor olabilir; ancak yanlış dosyanın yüklenmesi veya uygulamanın eski çıktıyı yeniden üretmesi de araştırılmalıdır. Önce tarayıcıdaki adres ile sunucuda değiştirdiğiniz dosyanın aynı kaynağı gösterdiğini doğrulayın.Statik dosya değiştiğinde URL'ye sürüm veya içerik özeti eklemek yaygın bir yöntemdir. Örneğin
style.v2.css, eski style.v1.css adresinden farklı bir kaynak olur. Sorgu parametresiyle sürümleme de kullanılabilir; CDN'nin bu parametreyi önbellek anahtarına katıp katmadığı kontrol edilmelidir. HTML içinde yeni dosya adresinin yayımlandığını da doğrulayın.Önbellek sorununu nasıl ayırabilirsiniz?
- Değişen dosyanın doğru sunucuda ve adreste bulunduğunu kontrol edin. Kaynak dosyanın kendisi eskiyse önbellek temizliği sorunu çözmez.
- Aynı adresi başka bir tarayıcı veya cihazda karşılaştırın. Fark yalnız bir istemcideyse yerel önbelleği araştırın; bu gözlem tek başına kesin neden değildir.
- Tarayıcının ağ araçlarında ilgili isteğin yanıtını ve
Cache-Controlbaşlığını inceleyin. VarsaAgeve CDN'ye özgü önbellek durumu başlıklarını da değerlendirin. Her sistem aynı durum başlığını kullanmaz. - Eski yanıtı tuttuğu belirlenen katmanda, ilgili içeriği hedefleyerek temizleme veya geçersiz kılma uygulayın. Ardından aynı URL'nin güncel içeriği sunduğunu tekrar kontrol edin.
- Eski içerik tekrar oluşuyorsa yalnız temizlemeyi tekrarlamayın. Önbellek anahtarını, içerik yenileme akışını ve kaynak sunucu seçimini inceleyin.