Skip to content

Glossary

ETag

Önbellek doğrulama için HTTP varlık etiketi

By Published Updated

Bir ETag (Varlık Etiketi), istemcinin tekrar indirmeden önbellekteki kaynağı yeniden doğrulamasına olanak tanıyan — tipik olarak yanıt gövdesinin hash'i veya sürüm damgası olan — bir HTTP yanıt başlığıdır.

İş akışı:

  1. İlk istek: sunucu kaynağı ETag: "abc123" ile döndürür.
  2. İstemci yanıtı ETag ile önbelleğe alır.
  3. Sonraki istek: istemci If-None-Match: "abc123" gönderir.
  4. Sunucu güncel ETag'i istemcinin ETG'siyle karşılaştırır. Eşitse: boş gövde ile 304 Not Modified, istemci önbellekteki kopyayı kullanır. Farklıysa: yeni gövde ve yeni ETag ile 200 OK.

İki ETag çeşidi:

  • Güçlü ETag'ler — baytlar değişirse değişir. Varsayılan.
  • Zayıf ETag'lerW/ öneki, "anlambilim olarak eşdeğer" yanıtlar arasında eşleşebilir (ör. aynı içeriğin sıkıştırılmış ve sıkıştırılmamış hali).

ETag, üç HTTP önbellek doğrulama mekanizmalarından biridir (Last-Modified + If-Modified-Since ve Cache-Control max-age ile birlikte). İçerik hash'li varlık URL'lerine sahip modern statik siteler için ETag nadiren gereklidir — ancak istemci tarafı önbelleğe almayı isteyen dinamik API'ler için çalışma atını olmaya devam eder.

Çalışılmış örnek

Tarayıcı ilk kez /api/profile'ı getirir. Sunucu şunu yanıtlar: HTTP/1.1 200 OK, ETag: "v42-7a8b9c", gövde = 4,2 KB JSON. Tarayıcı her ikisini önbelleğe alır. Sonraki sayfa yükünde tarayıcı GET /api/profileIf-None-Match: "v42-7a8b9c" ile gönderir. Sunucu güncel ETag'i hesaplar — hiçbir şey değişmediğinden hâlâ "v42-7a8b9c" — ve sıfır bayt gövde ile HTTP/1.1 304 Not Modified yanıtı verir. Tarayıcı önbellekteki kopyayı sunar. Tasarruf edilen bant genişliği: 4,2 KB; ağ gidiş-dönüş gecikmesi hâlâ ödenir. Bunu Cache-Control: max-age=300 ile karşılaştırın; bu 5 dakika boyunca gidiş-dönüşü tamamen atlar — ETag'in neden ikinci en iyi önbellek stratejisi olduğunu anlarsınız: bayatlığın önlenmesi gerektiğinde tazeliği doğrular, ancak ağ gidiş-dönüşünü gerçekten kaydetmez. Modern statik siteler, parmak izi eklenmiş URL'leri + uzun vadeli max-age'i tercih eder ve ETag'i tamamen atlar.

Ne zaman ve neden önemlidir

ETag iki farklı iş akışı için önem taşır: önbellek yeniden doğrulama (yanıtlar büyük ve değişmezken bant genişliği tasarrufu) ve iyimser eşzamanlılık kontrolü (REST API'lerinde kayıp-güncelleme hatalarının önlenmesi). Önbellekte kaçınılacak hata, alt-saniyelik hassasiyet içeren bir zaman damgasından zayıf ETag oluşturmaktır — yük dengeli kümedeki her sunucu aynı kaynak için farklı bir değer hesaplar ve istemciler sürekli geçersiz kılar. Tüm kopyaların aynı ETag üretmesi için kararlı bir içerik hash'i kullanın (gövdenin SHA-256'sı, genellikle 16 karaktere kısaltılmış). Eşzamanlılıkta kaçınılacak hata, sunucu tarafında If-Match'i doğrulamamaktır — birçok geliştirici başlığı yazma işlemlerine ekler; ancak sunucu bunu görmezden gelir ve yarış koşulunu düzeltilmeden bırakır. Referans: MDN — ETag HTTP başlığı.

İyimser eşzamanlılık kontrolü — ETag'in ikinci işi: ETag aynı zamanda "başkası değiştirdiyse verimi üzerine yazma" için standart mekanizmadır. İstemci kaynağı GET eder, ETag'i yakalar, düzenlemeler yapar, ardından If-Match: "abc123" ile geri PUT eder. Sunucu tarafındaki kaynak o zamandan bu yana değiştiyse (farklı ETag), sunucu 412 Precondition Failed döndürür ve istemci yenileme ve yeniden birleştirme gerektiğini bilir. AWS S3, Google Cloud Storage ve eşzamanlı düzenlemeleri destekleyen çoğu REST API bu tam örüntüyü kullanır. Referans: RFC 9110 §8.8.3 — ETag.

Frequently asked questions

ETag nedir?
ETag (varlık etiketi), bir kaynağın belirli bir sürümü için opak tanımlayıcı — tipik olarak hash veya sürüm numarası — içeren bir HTTP yanıt başlığıdır. Kaynak değiştiğinde ETag değişir. Tarayıcılar, tam içeriği yeniden indirmeden önbellekteki kopyaları doğrulamak için ETag kullanır.
ETag önbelleğe alma pratikte nasıl çalışır?
Sunucu, yanıtla birlikte ETag: "abc123" gönderir. Bir sonraki istekte tarayıcı If-None-Match: "abc123" gönderir. Kaynak değişmediyse sunucu, gövde olmadan 304 Not Modified döndürür — bant genişliği tasarrufu sağlar. Değiştiyse yeni içerik ve yeni ETag ile 200 döndürür.
ETag ile Last-Modified arasındaki fark nedir?
Last-Modified, zaman damgasına dayalı doğrulayıcıdır; ETag, içerik tabanlı hash'tir. ETag'ler saniye altı değişiklikler için daha güvenilirdir (zaman damgaları 1 saniyelik çözünürlüğe sahiptir) ve önceki bir duruma geri dönebilen dinamik kaynaklar için (aynı ETag = yeniden indirme yok). ETag'ler, hassasiyetin önemli olduğu durumlarda tercih edilir.
Güçlü ile zayıf ETag arasındaki fark nedir?
Güçlü ETag (ETag: "abc123"), önbellekteki ve güncel kaynak arasında bayt bayt özdeşliği garantiler. Zayıf ETag (ETag: W/"abc123"), anlambilim eşdeğerliğini gösterir — içerik kullanıcı açısından aynıdır, ancak sıkıştırma veya küçük biçimlendirme bakımından farklılık gösterebilir. Zayıf ETag'ler aralık istekleriyle kullanılamaz.

Related

Published May 15, 2026 · Last reviewed May 31, 2026