ETag’leri Anlamak: Verimli Önbelleklemenin Anahtarı
Web uygulamanız dosyaları istemcilere sunarken, verimli önbellekleme mekanizmaları performansta kritik bir rol oynar. Önbelleklemenin etkili bir şekilde yönetilmesinin bir yolu ETag HTTP başlıkları
nın uygulanmasıdır. Bu blog yazısında, kaynak dosyalarınız için nasıl bir ETag
başlığı oluşturulacağını ve bunun web üzerindeki kaynak teslimatını optimize etmek için neden gerekli olduğunu inceleyeceğiz.
ETag Nedir?
ETag
(Entity Tag), bir web sunucusu tarafından verilen ve bir kaynağın belirli bir sürümünü temsil eden rastgele bir dizedir. Bir istemci bir dosya talep ettiğinde, sunucu kaynağı ve onun ETag
‘ini geri gönderir. O istemci bir sonraki sefer aynı dosyayı talep ettiğinde, isteğin başlıklarına ETag
‘i ekler. Sunucu isteğin ETag
‘ini dosyanın güncel sürümüyle karşılaştırır:
- Eğer
ETag
eşleşiyorsa, bu durum dosyanın değişmediği anlamına gelir ve sunucu304 Not Modified
durum koduyla yanıt verir, böylece bant genişliği tasarrufu sağlanır ve yükleme süreleri iyileşir. - Eğer
ETag
eşleşmiyorsa, sunucu güncellenmiş dosyayı ve yeniETag
‘i gönderir. Bu mekanizma, istemcinin her zaman kaynağın en son sürümünü almasını sağlar.
ETag Nasıl Oluşturulur: Adım Adım Kılavuz
1. ETag Yapısını Anlamak
Genel bir kontrol toplamı kullanmak yerine, ETag
‘i dosyanın özelliklerine dayalı olarak oluşturabiliriz. Etkili bir yol, aşağıdakileri birleştiren bir dize oluşturmaktır:
- Dosyanın son değiştirilme zamanı (
st_mtime
): Dosyanın en son ne zaman değiştirildiğini gösterir. - Dosya boyutu (
st_size
): Dosya içeriğinin boyutunun değişmediğini doğrulamak için yardımcı olur. - İnode numarası (
st_ino
): Dosya sistemindeki dosyanın benzersiz bir tanımlayıcısıdır.
Bu kombinasyon, dosya sürümünü takip etmek için sağlam bir yöntem sağlar.
2. Kodu Uygulamak
ETag
oluşturmak için basit bir fonksiyon aşağıda verilmiştir. Bu fonksiyon, önceden tahsis edilmiş bir dize ve dosyanın meta verilerini içeren bir stat
yapısına işaretçi alır.
char *mketag(char *s, struct stat *sb) {
sprintf(s, "%d-%d-%d", sb->st_mtime, sb->st_size, sb->st_ino);
return s;
}
3. ETag Sürecinin Akışı
ETag sürecinin nasıl çalıştığını basit bir şekilde aşağıda inceleyebilirsiniz:
-
İstemci bir dosya ister (örneğin,
foo
):İstemci -> İstek: GET /foo
-
Sunucu dosya ve
ETag
ile yanıt verir:Sunucu -> Yanıt: Dosya foo, ETag: "xyz"
-
İstemci, alınan
ETag
ile yeni bir istek yapar:İstemci -> İstek: GET /foo (ETag ile: "xyz")
-
Sunucu
ETag
‘i kontrol eder:- Eğer güncel sürümle eşleşiyorsa,
304 Not Modified
ile yanıt verir. - Eğer eşleşmiyorsa, güncellenmiş dosya ve yeni bir
ETag
gönderir.
- Eğer güncel sürümle eşleşiyorsa,
4. ETag Kullanmanın Avantajları
ETag
kullanmanın birkaç avantajı vardır:
- Yükleme Sürelerinin Azalması: İstemciler, değiştirilmemiş dosyaları indirmekten kaçınır, böylece bekleme süresi azalır.
- Daha Düşük Bant Genişliği Tüketimi: Sadece değiştirilen dosyalar aktarılır, bu da hem sunucu hem de istemci için kaynak tasarrufu sağlar.
- Geliştirilmiş Kullanıcı Deneyimi: Kullanıcılar, gereksiz gecikmeler olmadan güncel içeriği hızlı bir şekilde alırlar.
Sonuç
Kaynak dosyalarınız için bir ETag
başlığı oluşturmak, web sunucusu verimliliğini artırmak ve istemci tarafı önbellekleme mekanizmalarını optimize etmek için basit ve etkili bir yoldur. Dosya meta verilerini benzersiz bir dize haline getirerek, istemcilerin her zaman en güncel sürümü almasını sağlarken gereksiz veri transferini de en aza indirebilirsiniz.
Yukarıda belirtilen şekilde ETag
‘leri uygulayarak, web uygulamanızın performansını optimize etme ve kullanıcılarınıza daha akıcı bir deneyim sunma yolundasınız.