HTTP Cache Doğrulama: ETag, Last-Modified ve Cache-Control Rehberi

HTTP Cache Doğrulama: ETag, Last-Modified ve Cache-Control Rehberi - Corelux
27 May 2026
Paylaş:

HTTP Cache Doğrulama: ETag, Last-Modified ve Cache-Control Rehberi

Son Güncelleme: Mayıs 2026

HTTP önbellekleme performans, bant genişliği tasarrufu ve kullanıcı deneyimi için kritik bir tekniktir. Bu makalede ETag, Last-Modified ve Cache-Control başlıklarının (headers) nasıl çalıştığını, CDN ve reverse proxy ile etkileşimlerini, Nginx/Apache örneklerini ve sık karşılaşılan sorunların çözüm yollarını pratik örneklerle öğreneceksiniz.

İçindekiler

HTTP Cache Nedir?

Önbellekleme (caching), sunucu ve istemci (tarayıcı/CDN/proxy) arasında tekrar eden veri transferlerini azaltmak için kullanılan bir tekniktir. HTTP protokolü, kaynakların (ör. CSS, JS, HTML, API yanıtları) hangi koşullarda yeniden getirileceğini belirlemek için başlıklar sağlar. Bu başlıklar, performans ve kaynak tüketimi açısından doğru şekilde yapılandırılmalıdır.

Cache Headers ve Amaçları

En yaygın kullanılan başlıklar şunlardır:

  • Cache-Control: İstemci ve ara katmanlara (proxy/CDN) önbellekleme politikalarını belirler.
  • ETag: Kaynağın benzersiz sürümünü belirten etiket. Koşullu isteklere (conditional requests) olanak sağlar.
  • Last-Modified: Kaynağın son değişiklik tarihini belirtir; istemci bu tarihe göre doğrulama yapabilir.
  • Expires: Kaynağın geçerlilik süresini mutlak zaman olarak belirtir (Cache-Control varken genellikle birlikte kullanılmaz).

ETag vs Last-Modified Karşılaştırması

İki temel doğrulama mekanizması vardır: ETag ve Last-Modified. Her ikisi de istemcinin sunucuya gereksiz veri talep etmesini engelleyebilir; farkları ve avantajları aşağıdaki tabloda özetlenmiştir.

Özellik ETag Last-Modified
Açıklama Kaynağın benzersiz sürüm etiketi (genellikle hash veya inode/timestamp kombinasyonu). Kaynağın son değişiklik zamanı (HTTP-date formatı).
Doğruluk Yüksek (byte seviyesinde değişiklikleri algılar). Zaman hassasiyeti nedeniyle bazı değişiklikleri kaçırabilir (ör. aynı saniyede yapılan değişiklikler).
Maliyet Üretimi için hesaplama veya dosya meta verisi gerektirebilir. Dosya sistemi timestamp ile kolaydır, ek maliyet düşük.
CDN/Proxy Uyumluluğu Çoğu CDN destekler; fakat CDN cache key politikaları etkileyebilir. Genellikle sorunsuz çalışır, ancak saat uyumsuzlukları sorun yaratabilir.

Pratik tavsiye: Statik varlıklar için Cache-Control ile uzun süreli önbellekleme ve sürümleme (filename sürümlendirme) tercih edin; dinamik veya sık değişen içerikler için ETag veya Last-Modified ile koşullu doğrulama sağlayın.

CDN ile Uyum ve Öncelikler

CDN kullanıyorsanız önbellekleme mantığınızı CDN'nin davranışına göre ayarlamalısınız. CDN'ler genelde Cache-Control ve Expires başlıklarını referans alır; bazı CDN'ler ETag'i göz ardı edebilir veya kendi cache key'ini kullanabilir.

  • Origin kontrolü: Origin sunucunuzda doğru başlıkları göndermek CDN davranışını şekillendirir.
  • Cache-key: CDN'nin hangi öğeyi cache'leyeceğini belirler — host, path, query string ve başlıklara göre değişebilir.
  • Heuristic TTL: CDN'ler bazen eksik başlıklar için heuristic TTL uygulayabilir; bu, beklenmeyen cache süresine yol açabilir.

CDN ile çalışırken özellikle dikkat edilmesi gerekenler:

  1. Statik içerik: Uzun TTL + dosya ismine sürüm ekleme (ör. app.v1.2.3.js).
  2. API ve HTML: Kısa TTL veya koşullu doğrulama (ETag/Last-Modified) tercih edin.
  3. Cache Invalidation: CDN cache temizleme (purge) süreçlerini ve maliyetini planlayın.

Nginx Örnek Konfigürasyonlar

Aşağıda sık kullanılan Nginx örnekleri yer almaktadır. Statik dosyalar için agresif Cache-Control, HTML için koşullu doğrulama önerilir.

Statik dosyalar için uzun TTL

location ~* \.(js|css|png|jpg|jpeg|gif|svg|webp|avif)$ {
    expires 30d;
    add_header Cache-Control "public, max-age=2592000, immutable";
}

HTML için ETag devre dışı, Last-Modified bırakma

ETag bazen Nginx ve upstream arasında çakışma yaratır; HTML için Last-Modified yeterli olabilir.

location / {
    add_header Cache-Control "no-cache, must-revalidate";
    add_header Last-Modified $date_gmt;
    etag off;
}

ETag üretimi (dosya sistemi tabanlı)

Nginx doğrudan ETag üretmez; çoğu durumda backend (ör. PHP/FastCGI) ETag döndürür. Ancak dosya sunucularında sendfile ve dosya metadatası ile beraber doğru yapılandırma önemlidir.

Apache Örnek Konfigürasyonlar

Apache, mod_expires ve mod_headers ile önbellekleme yönetimini kolaylaştırır. Ayrıca mod_headers ile ETag / Last-Modified davranışı değiştirilebilir.

mod_expires ile örnek

<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresByType image/png "access plus 30 days"
  ExpiresByType text/css "access plus 7 days"
</IfModule>

ETag kontrolü

# ETag'i devre dışı bırakmak için
FileETag None
# veya sadece inode/time/size kombinasyonunu ayarlamak için
FileETag MTime Size

Dinamik İçerik ve Cache Doğrulama

Dinamik içerik (ör. kullanıcıya özel HTML, API yanıtları) için önbellekleme stratejisi uygulamak daha dikkat gerektirir. Aşağıdaki yaklaşımlar uygulanabilir:

  • Cache-Control: private veya no-store ile kullanıcı bazlı verilerin proxy/CDN tarafında cachelenmesini engelleyin.
  • Koşullu GET: API yanıtları için ETag üreterek istemcilerin yalnızca değişiklik varsa tam içerik indirmesini sağlayın.
  • Fragment cache: Büyük sayfalarda sabit ve değişen bölümleri ayrı cache katmanlarında saklayın.

Örnek: Basit bir PHP yanıtında ETag oluşturma:

// PHP örneği
$data = get_api_data();
$etag = md5(json_encode($data));
header("ETag: \"$etag\"");
if (isset($_SERVER['HTTP_IF_NONE_MATCH']) && trim($_SERVER['HTTP_IF_NONE_MATCH']) == "\"$etag\"") {
    header("HTTP/1.1 304 Not Modified");
    exit;
}
echo json_encode($data);

Sorun Giderme ve İpuçları

Önbellekleme ile ilgili sık karşılaşılan sorunlar ve çözümleri:

  • Beklenmeyen eski içerik: CDN veya reverse proxy cache'ini purge (temizle) edin; Cache-Control başlıklarını kontrol edin.
  • ETag değişmiyor: ETag üretiminde kullanılan algoritma veya kaynak sürümlendirmesini gözden geçirin.
  • Saat uyumsuzluğu: Last-Modified başlıkları sunucular arası saat farkı yüzünden hatalı olabilir; NTP ile saat senkronizasyonu sağlayın.
  • Vary başlığı: Vary doğru ayarlanmazsa farklı kullanıcı ajanları veya başlıklara göre cache hataları oluşur. Örneğin dil başlığı için Vary: Accept-Language kullanılmalıdır.
  • HTTPS & CDN: CDN ile TLS offload yapılıyorsa origin-connector başlıklarının korunmasına dikkat edin (ör. X-Forwarded-Proto).

Aşağıdaki komutlar ile header testleri yapabilirsiniz:

# Kaynağın header'larını görüntüleme
curl -I https://example.com/app.v1.2.3.js
# Koşullu istekte bulunma (If-None-Match)
curl -H "If-None-Match: \"abcdef\"" -I https://example.com/data.json

Sıkça Sorulan Sorular

ETag nedir ve neden kullanmalıyım?

ETag, bir kaynağın sürümünü temsil eden benzersiz bir etiketir. ETag sayesinde istemci, sunucudan kaynağın değişip değişmediğini sorgulayabilir; değişmemişse sunucu 304 Not Modified döner ve veri transferi azalır.

Last-Modified ile ETag arasından hangisini seçmeliyim?

Her ikisi de kullanılabilir. Last-Modified daha basit ve düşük maliyetliyken, ETag byte seviyesinde doğruluk sağlar. Kritik dosyalar için ETag, genel kullanım için Last-Modified yeterli olabilir.

Cache-Control ve Expires arasındaki fark nedir?

Cache-Control modern ve terci edilen yaklaşımdır; directive'lerle (max-age, public, private, immutable) daha esnek kontrol sağlar. Expires ise mutlak zaman belirtir ve legacy desteği içindir.

CDN'im ETag'i göz ardı ediyorsa ne yapmalıyım?

CDN sağlayıcınızın dokümantasyonunu kontrol edin; bazı CDN'ler ETag yerine kendi cache-key ve sürümleme yöntemlerini kullanır. Bu durumda dosya isminde sürümleme yaparak (cache-busting) sorunu çözebilirsiniz.

Dinamik API yanıtlarını nasıl güvenli şekilde cache'lerim?

API yanıtları için Cache-Control: private, max-age=0, must-revalidate veya ETag ile koşullu GET kullanabilirsiniz. Ayrıca kullanıcıya özel verileri proxy/CDN tarafında cachelemeden önce Vary ve kimlik doğrulama başlıklarını doğru ayarlayın.

Sonuç

Doğru HTTP önbellekleme stratejisi uygulamak web uygulamanızın hızını ve verimliliğini doğrudan artırır. Statik varlıklar için uzun TTL ve sürümleme, dinamik içerikler için ETag/Last-Modified ve koşullu doğrulama en iyi uygulamalardır. CDN kullanıyorsanız, CDN davranışını ve cache-key ayarlarını mutlaka doğrulayın.

Corelux'un Hosting ve Türkiye VPS Sunucu hizmetleri ile performans odaklı altyapı tercih edebilir veya yüksek kaynak gereksinimleriniz için Kiralık Sunucu seçeneklerini inceleyebilirsiniz. Daha özel ihtiyaçlar için SSL Sertifikası ve Yedekleme Hizmeti sayfalarımız yardımcı olacaktır.

Uygulamanıza özgü öneri isterseniz, kullandığınız web sunucusunun (Nginx/Apache), CDN sağlayıcınızın ve uygulama tipinizin bilgilerini paylaşın; size adım adım öneriler hazırlayayım.

Yazar

Boran BAR

Chat on WhatsApp