HTTP Caching
- Türkçe karşılığı
- HTTP önbellekleme
- Okunuşu
- eyç-ti-ti-pi keşing
Günlük kullanımda iki ad da yaygın.
Kısaca
HTTP caching, saklanan HTTP yanıtlarının tarayıcılar, CDN'ler ve proxy'ler tarafından, Cache-Control ve ETag başlıklarıyla denetlenerek yeniden kullanılmasıdır.
HTTP caching nedir?
HTTP caching, bir tarayıcının, CDN'in ya da proxy'nin bir yanıtın kopyasını tutmasını ve sonraki isteklerde onu kaynak sunucudan yeniden getirmek yerine yeniden kullanmasını sağlar. Tarayıcının kendi önbelleğinden sunulan bir dosya neredeyse anında yüklenir ve hiç ağ kullanmaz. Nelerin, kimler tarafından ve ne kadar süreyle önbelleğe alınabileceğine sunucu, HTTP yanıt başlıklarıyla karar verir.
Ana başlık Cache-Control'dür. max-age=3600 yanıtın bir saat taze kalacağı anlamına gelir; public CDN'ler gibi paylaşımlı önbelleklerin onu saklamasına izin verirken private onu kullanıcının kendi tarayıcısıyla sınırlar; no-cache, saklanan kopyanın her kullanımdan önce sunucuyla yeniden doğrulanması gerektiği anlamına gelir; no-store ise hassas veriler için doğru olan şekilde, saklanmasını tamamen yasaklar. Saklanan bir kopya eskidiğinde istemci onu koşullu bir istekle yeniden doğrular: elindeki ETag'i bir If-None-Match başlığında ya da bir tarihi If-Modified-Since içinde gönderir. Hiçbir şey değişmemişse sunucu gövdesiz bir 304 Not Modified ile yanıt verir ve bant genişliğinden tasarruf edilir.
HTTP caching, evde basılı bir tren tarifesi tutmaya benzer: her seferinde istasyonu aramak yerine kendi kopyanıza bakarsınız ve güncelliğini yitirmiş olabileceğinde, tamamen yeni bir kopya istemek yerine 'bu sürümden beri bir şey değişti mi?' diye sorarsınız. Statik varlıklar için standart bir strateji cache busting'dir: dosya adına app.3f9a1c.js gibi içeriğin bir hash'ini koyun ve immutable ile bir yıl önbelleğe alın; çünkü herhangi bir değişiklik yeni bir dosya adı üretir. HTML sayfaları ise tersine, kullanıcıların yeni sürümleri hızla görmesi için genellikle yeniden doğrulanır.
İki karışıklık yaygındır. Adına rağmen no-cache önbelleğe almaya izin verir; yalnızca yeniden kullanmadan önce sunucuyla kontrol gerektirir, saklamayı gerçekten engelleyen direktif ise no-store'dur. HTTP caching ayrıca sunucudaki Redis gibi bir uygulama önbelleğinden de farklıdır: HTTP caching tüm yanıtları istemcilerde ve aracılarda başlıklara göre saklar; uygulama önbelleği ise sorgu sonuçları gibi verileri backend'inizin içinde, kodunuzun denetiminde saklar.
Önemli noktalar
Cache-Control, tarayıcılara ve CDN'lere bir yanıtı yeniden kullanıp kullanamayacaklarını ve ne kadar süreyle kullanabileceklerini söyler.ETagveLast-Modified, istemcilerin ucuz bir304 Not Modifiedyanıtıyla yeniden doğrulama yapmasını sağlar.no-cacheher kullanımdan önce yeniden doğrula demektir;no-storeasla saklama demektir.- Hash'li dosya adları, uzun bir
max-ageveimmutable, statik varlıklar için standarttır. private, kişiselleştirilmiş yanıtları CDN gibi paylaşımlı önbelleklerin dışında tutar.
Örnek
# Response headers for a hashed static file: cache it for a year
HTTP/1.1 200 OK
Cache-Control: public, max-age=31536000, immutable
# Response headers for an HTML page: keep it, but revalidate before reuse
HTTP/1.1 200 OK
Cache-Control: no-cache
ETag: "v42"
# Later, the browser asks whether its stored copy is still current
GET /index.html HTTP/1.1
If-None-Match: "v42"
# Nothing changed, so the server sends no body
HTTP/1.1 304 Not ModifiedSık sorulan sorular
no-cache ile no-store arasındaki fark nedir?
no-cache yanıtın saklanmasına izin verir ancak önbelleğin her yeniden kullanımdan önce sunucuyla kontrol etmesini ister. no-store ise yanıtın hiçbir yerde saklanmasını yasaklar; bu, bankacılık sayfaları gibi hassas veriler için doğru ayardır.
Tarayıcıların önbelleğe alınmış bir dosyanın yeni sürümünü yüklemesini nasıl sağlarım?
Dosyanın URL'sini değiştirin; genellikle adına bir içerik hash'i koyarak, ki bundler'lar bunu otomatik yapar. Her ziyaretçinin önbelleğine güvenilir biçimde müdahale edemezsiniz; bu yüzden uzun süre önbelleğe alınan dosyalar aynı URL altında asla değişmemelidir.
ETag nedir?
ETag, bir kaynağın belirli bir sürümü için, çoğunlukla içeriğinin hash'i olan bir tanımlayıcıdır ve ETag yanıt başlığında gönderilir. İstemciler onu If-None-Match içinde geri gönderir ve sürüm hâlâ güncelse sunucu 304 Not Modified yanıtı verir.
İlgili sayfalar
- ÖnbellekBackend ve API'ler, s. 34Önbellek, sık kullanılan verilerin kopyalarını tutan hızlı ve geçici bir depolama katmanıdır; sonraki istekler yavaş işi tekrarlamadan hızla karşılanır.
- HTTPWeb Geliştirme, s. 20HTTP, tarayıcıların, uygulamaların ve sunucuların basit bir istek-yanıt döngüsüyle web sayfaları ve veri alışverişi yapmasını sağlayan protokoldür.
- CDNDevOps ve Bulut, s. 7CDN, dünyanın dört bir yanına yayılmış ve web sitesi içeriğinin kopyalarını saklayıp her kullanıcıya en yakın konumdan sunan bir sunucu ağıdır.
- Web TarayıcısıWeb Geliştirme, s. 57Web tarayıcısı, sunuculardan web sayfalarını alıp HTML, CSS ve JavaScript'i ekranda gördüğünüz etkileşimli sayfalara dönüştüren uygulamadır.
- Core Web VitalsWeb Geliştirme, s. 8Core Web Vitals, bir sayfanın gerçek kullanıcı deneyimini ölçen üç metriktir: yükleme hızı (LCP), yanıt verme (INP) ve görsel kararlılık (CLS).
- Service WorkerWeb Geliştirme, s. 41Service worker, tarayıcının arka planda, sayfadan ayrı çalıştırdığı, ağ isteklerini yakalayıp çevrimdışı kullanımı ve push mesajlarını sağlayan betiktir.
- HTTP BaşlığıWeb Geliştirme, s. 21HTTP başlığı, bir HTTP isteği ya da yanıtıyla gönderilen ad-değer satırıdır; içerik türü, önbellek kuralları ya da kimlik bilgileri gibi ayrıntıları taşır.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin