Teknik SEO

HTTP Etag Nedir? Nasıl Kullanılır?

Etag (Entity Tag), Servera gönderilen HTTP isteği sonrası iletilen bir kaynağın versiyonunun belirlenmesinde tanımlayıcı olarak kullanılan bir HTTP yanıt başlığıdır. HTTP Etag kullanımı ile istemci – server iletişiminde kullanılan cache (önbellekleme) sisteminin çok daha verimli olarak kullanılması sağlanır. Web servera gönderilen bir istek sonrası kullanılan etag başlığı ile istek gönderilen kaynağın önbellekte bulunan kaynak ile aynı olduğu belirlenerek serverın değişmeyen kaynaklar için tekrar tekrar işlem gerçekleştirmesi ve aynı kaynakları içeren tam bir yanıt döndürmesi engellenebilir.

İstemci tarafından istek gönderilerek indirilen ve lokal olarak önbelleklenen bir dokümanın önbellekteki versiyonu ile serverda barındırılan güncel versiyonunun farklılıklarının karşılaştırılmasında validatör olarak kullanılan etag ile önbellekleme (cache) sisteminin verimli çalışması hedeflenir.

İstemci tarafından istek gönderilerek daha öncesinde önbelleklenen bir doküman, server tarafında değiştirildiğinde yeni bir etag (entity tag) server tarafından oluşturulur. İstemci tarafından tekrar gönderilen istekte etag değeri ile birlikte önbelleklenen doküman ile güncellenen doküman arasındaki farklılıklar etag değeri kullanılarak kontrol edilir ve yenilik durumuna göre web serverın full HTTP yanıtı göndermesi beklenir.

Özetle Etag, istemci server iletişiminde kaynakların verimli önbelleklenmesi ve sunucu bandwith limitlerinin verimli kullanılabilmesinde faydalanılan web taraflı parmak izleridir.

Etag Syntax (Söz Dizimi)

HTTP Etag başlığı ASCII karakterlerin çift tırnak içerisinde (string) olarak yazılması ile oluşturulur.

Aşağıda weak ve strong olmak üzere 2 farklı validatör tipi için syntax yapılarını görüntüleyebilirsiniz ;

ETag: W/"<etag_value>"
ETag: "<etag_value>"

Etag: W/"12345681231-36b" (Weak validator)
Etag: "12345681231-tr34" (Strong Validator)

ETag Direktifleri

E-tag direktifleri Weak validatör ve Etag stringi (w/ içermeyen Strong Validatör) olmak üzere 2 farklı yapıda incelenebilir.

Weak Validatör (W/)

Üstteki örneklerde W/ işaretlemesi ile başlayan E-Tag yapısı weak validatör olarak adlandırılır.  Weak validatörler server tarafında strong validatörlere kıyasla çok daha kolay oluşturulur ancak kaynak versiyon karşılaştırması noktasında Strong E-Tag yapısına kıyasla zayıftır. Çünkü weak validatör bir kaynağın 2 farklı versiyonu arasında değerlendirme gerçekleştirirken kaynakların içerik olarak birbirleri ile aynı olma durumunu kontrol eder ancak bu kontrol byte-to-byte değil içeriğin semantik (anlamsal) uyumluluğu ile ilişkilidir. Bu sebeple weak etag validatörler byte range isteklerinde önbelleklemeyi engeller.

Örneğin: Weak validatör kullanılarak önbelleklenmiş bir sayfada içeriğin tümüyle aynı olduğu senaryoda sayfada yalnızca tarihin değişmesi, like sayısının değişmesi gibi içerik anlamında bağlantılı olmayan ancak yapısal olarak değişiklik gerçekleşmiş elementler, weak validatör kullanıldığında eski ve yeni karşılaştırmasında dikkate alınmaz. Yani weak validatör kullanıldığında sayfada içeriksel değişim olmadığı sürece tarihin değişmesi, like sayısının değişmesi gibi ufak metriksel farklar değişiklik olarak kabul edilmez ve kaynaklar birbiri ile aynı kabul edilir.

Etag Value (Strong Validatör)

Entity Tag (Etag) değeri istek gönderilen kaynağı benzersiz bir string değeri ile temsil eder. Önbelleğe alınan ve istek gönderilen kaynağı benzersiz string değeri ile temsil eden etag değeri, kaynak değişim gösterdiğinde ve yeni kaynak yanıt olarak gönderildiğinde gönderilen yeni kaynağa göre güncellenir. Strong validatör olarak adlandırılan klasik etag değeri üstte belirttiğimiz gibi ASCII karakterlerin çift tırnak içerisinde bir string olarak yazılmasından oluşur. HTTP Etag başlığında W/ işaretlemesi olmadığında etag doğrudan strong validatör olarak işlem görür. Tipik olarak, ETag değeri içeriğin özetinin, son değişiklik zaman damgasının hashlenmiş hali veya yalnızca bir revizyon numarasıdır.

ETag Nasıl Çalışır?

Tipik kullanımda, bir URL ‘ye yönelik istek gönderildiğinde, Web sunucusu, bir HTTP yanıt başlığında “ETag” alanına yerleştirilen ilgili ETag değeriyle birlikte kaynağın mevcut halini döndürür.

Örn:

Default HTTP Headers (Cache control / expire header)
ETag: "246231231123be"

HTTP yanıt başlığı ile birlikte gönderilen kaynak, istemci tarafında sunucudan gönderilen Etag değeri ve diğer http başlıkları ile birlikte önbelleklenebilir. Önbellekleme gerçekleştikten sonra istemci tarafından aynı kaynağa başka bir istek gönderildiğinde isteğin gönderildiği kaynağın önbellek durumunun güncelliği ile alakalı ilk önbellekleme gerçekleştirilirken kullanılan cache control veya expires header gibi başlıklar kontrol edilir.  Eğer önbelleklenen dosya kullanılan cache başlığına göre güncelliğini koruyor ise ilgili kaynak doğrudan lokal önbellek üzerinden yüklenir. Ancak bu durumun tersine önbelleklenen dosyanın cache control yada expires header süresi güncelliğini yitirmiş ise istemciden if-none-match başlığı ile birlikte etag değeri yanıt olarak servera döndürülür ve yeni istek gönderilir.

If-None-Match: "246231231123be"

Bu sonraki istekte, sunucu artık kaynağın geçerli sürümü için istemcinin önbelleklenmiş ETag’ını güncel ETag ile karşılaştırabilir. ETag değerleri eşleşirse, yani kaynak değişmediyse, sunucu HTTP 304 “Not Modified” yanıt kodu ile kaynağın değişmediğini belirten çok kısa bir yanıt döndürebilir.

Bununla birlikte, eğer ETag değerleri eşleşmiyorsa, bu durum kaynağın server tarafında büyük olasılıkla değiştiği anlamına gelir ve sanki ETag’ler kullanılmıyormuş gibi yanıt olarak HTTP 200 durum kodu ve yeni bir etag ile birlikte kaynağın içeriğini içeren tam bir yanıt döndürülür. Bu durumda, istemci önceden önbelleğe alınmış sürümünü, kaynağın yeni döndürülen temsili ve yeni ETag ile değiştirmeye karar verebilir.

HTTP cache-control başlığı yada expire-headers ile önbelleklenen dosyanın güncelliğini kaybetmesi sonrası gönderilen ikinci istekte duruma bağlı validatör olarak if-modified-since http başlığıda kullanılabilir. Etag değerine benzer şekilde if-none-match yerine if-modified-since: başlığı kullanılarak önbelleklemenin gerçekleştiği tarihte belirtilen last-modified değeri, validatör değer olarak önbelleğin güncelliğini, dosyanın değiştiği tarihi kontrol etmek amacıyla kullanılabilir.

Örn:

HTTP request default headers +
If-Modified-Since: Wed, 21 Oct 2015 07:28:00 GMT

Önbelleğin güncelliğini yitirmesi sonrası gönderilen ikinci istekte istemciden üstteki gibi bir istek web server’a iletilir. Gönderilen bu istekte üstteki etag örneğindekinden farklı olarak last-modified başlığının ilk önbelleklendiği süre if-modified-since başlığı ile gönderilerek önbelleğe alınan dosyanın o tarihten sonra güncellenip güncellenmediği bilgisi serverdan istenilir.

Gelen isteğe yanıt olarak sunucu, kaynak güncellendi ise yeni güncellenme tarihini http 200 ve last-modified: yanıt başlığı ile birlikte gönderir. Eğer kaynak önbelleklemenin gerçekleştiği tarihten sonra değişmedi ise HTTP 304 yanıt kodu Etag kontrolünde olduğu gibi döndürülür ve önbellekleme aynı kaynak versiyonu üzerinden devam eder.

Etag nasıl çalışır açıklaması örnek görsel
Etag ve last-modified-date’in birlikte kullanımı (ayrı ayrı kullanılabilirler). Önbelleğe alınmış kaynak değiştiğinde üsttek görsel örnekteki gibi bir süreç gerçekleşir. Görsel-Kaynak: https://developer.mozilla.org/

Tarayıcı ile ETag Nasıl Kontrol Edilir?

Bir kullanıcı, günümüz modern web tarayıcılarının tümünden, her web sayfası kaynağı için Etag’leri ayrı ayrı kontrol edebilir.

Aşağıda Google Chrome üzerinden bir web sayfasına ait kaynakların ETag değerinin nasıl kontrol edilebileceğini görüntüleyebilirsiniz. Süreç ve kontrol çıktısı modern web tarayıcılarının tümü için benzerdir.

Chrome ile ETag Değerini Kontrol Etmek

Chrome üzerinden etag değerini kontrol etmek için aşağıdaki işlemleri uygulayabilirsiniz.

  1. ETag değerlerini kontrol etmek istediğiniz web sayfasına giriş yaptıktan sonra Chrome üzerinde f12’ye basın. (F12 yerine sağ click ve devamında incele yaparak aynı ekrana ulaşabilirsiniz).
  2. Açılan Chrome DevTools ekranında network (ağ) paneline giriş yapın.
  3. Network (Ağ) ekranı üzerinde belirtilen web sayfası kaynaklarından herhangi bir tanesine tıklayın.
  4. Açılan ekranda Headers (başlıklar) bölümünde sunucuya tarayıcınızdan gönderdiğiniz request (istek) başlıklarını ve sunucunun size response (yanıt) olarak döndürdüğü yanıtları görüntüleyebilirsiniz.
  5. Response (yanıt) bölümünde web server tarafından iletilen Etag (kullanılıyor ise) başlığını ve oluşturulan ETag değerini görüntüleyebilirsiniz. Etag kullanılmıyor ise yerine (kullanılıyor ise) last-modified başlığını görüntüleyebilirsiniz.
Chrome Devtools üzerinden gerçekleştirilen kontrollerden örnek bir etag başlığı
Chrome Devtools üzerinden örnek HTTP (weak) etag ve last-modified başlığı

Oskay Günaçar

Oskay Günaçar, Teknik SEO uzmanı ve Dijitalzade SEO & Dijital Pazarlama bloğunun kurucusudur. Front-end programlama, Python, semantic SEO, teknik SEO, Google patentleri ve Google search başlıca ilgili alanlarıdır. 5 yıldan fazla SEO deneyimi ile İKİLER, Webtures, Boosmart ve Storyly.io şirketlerinde SEO uzmanı pozisyonlarında görev almış ve outsource uzman olarak çok sayıda projeye dahil olmuştur. Sektör içerisinde çalıştığı çok sayıda başarılı, büyük web sitesinin yönetim ve geliştirme (SEO) süreçlerinden elde ettiği uzmanlık ve deneyimleri paylaşmayı amaçladığı Dijitalzade web sitesi üzerinden doğru ve kaliteli bilginin kolay ulaşılabilir olması amacıyla içerik üretmektedir.

Bir yanıt yazın

Başa dön tuşu