# HTTP Caching

Adres: https://softwaredictionary.org/tr/terimler/http-caching
Kategori: Backend ve API'ler
Son güncelleme: 2026-09-30
Türkçe karşılığı: HTTP önbellekleme
Okunuşu: eyç-ti-ti-pi keşing

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.
- `ETag` ve `Last-Modified`, istemcilerin ucuz bir `304 Not Modified` yanıtıyla yeniden doğrulama yapmasını sağlar.
- `no-cache` her kullanımdan önce yeniden doğrula demektir; `no-store` asla saklama demektir.
- Hash'li dosya adları, uzun bir `max-age` ve `immutable`, statik varlıklar için standarttır.
- `private`, kişiselleştirilmiş yanıtları CDN gibi paylaşımlı önbelleklerin dışında tutar.

## Örnek: Statik dosyalar ve HTML sayfaları için önbellek başlıkları

```http
# 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 Modified
```

## Sı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.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
