on
Web Önbellekleme (Cache): Terminoloji, HTTP Headers
Önbellekleme Nedir?
Önbelleğe alma, daha sonraki istekleri daha hızlı yapmak için dönen yanıtların saklanmasıdır. Birbirinden farklı birden çok önbellekleme türü vardır.
Web önbellekleme kullanıcıya hızlı veri aktarımı yapabilme ve ağ trafiğini en aza indirmek için yapılır.
Terminoloji
-
Kaynak Sunucu (Origin Server):
İçeriğin orjinal konumudur. Web uygulamasını bulunduğu sunucudur. Önbellekten sunulamayan içeriğin alındığı yerdir. -
Önbellek Tutturma Oranı (Cache Hit Ratio):
Önbellekten alınabilen isteklerin toplam istek sayısına oranıdır. Ne kadar yüksek ise okadar doğru önbellekleme yapıldığını gösterir. -
Tezelik (Freshness):
Önbellekteki bir öğenin istemciye sunulup sunulamayacağını belirlemek için kullanılır. Belirtilen süreyi geçmediği sürece içerikler taze sayılır. -
Eski İçerik (Stale Content):
Öğelerin saklanması için belirtilen süre dolmuş ise eski sayılır ve istemciye eski içerik sunulmaz. Eski içerikler tekrar kaynak sunucudan istenir. Yeni öğeler tekrar belirtilen süre boyunca geçerli olacak şekilde önbellekte saklanır.
Web İçeriğinin Önbelleğe Alındığı Yerler
Web içerikleri birden çok noktada önbelleğe alınabilirler.
-
Tarayıcı Önbelleği (Browser Cache):
Web tarayıcıları her web sitesi için belli durumlarda önbellekleme yaparlar. Tekrar indirilmesi uzun süren içerikler veya sık sık istenmesi muhtemel içerikleri saklarlar. -
Aracı Önbellekleme (Intermediary caching proxies):
İstemci ile kaynak sunucu arasındaki herhangi bir sunucu istenilen içierikleri önbelleğe alabilir. Böylece kaynak sunucuya gitmeden içeriğe ulaşılabilir. -
Ters Önbellek (Reverse Cache):
Sunucu altyapısı kendi önbelleğini uygulayabilir. Bu şekilde her istek için veritabanı gibi kaynaklara başvurmadan önceden saklı tutulan içerik istemciye sunulur.
HTTP Cache Heraders
-
Expires:
İçeriğin süresinin ne zaman biteceğini belirtir. Süre bittikten sonra içerik için kaynak sunucuya gidilir. -
Cache-Control:
Expires başlığının daha gelişmiş ve modern halidir. İkisini birlikte kullanmak sorun çıkarmayabilir. Fakat genel olarak bu başlık tercih edilir. -
Etag (Entity Tag):
Önbellek doğrulaması için kullanılır. Etag ile içeriğe özel benzersiz bir değer atanır. İçeriğin kullanım süresi dolduğunda eldeki içeriği doğrulamak istediğinde, içerik için sahip olduğu Etag değerini gönderebilir. Kaynak önbelleğin aynı olduğunu ya da güncel içeriği yeni Etag ile birlikte geri gönderir. -
Last-Modified:
Öğenin en son değiştirildiği zamanı belirtirir. Bu, içeriği taze tutmak için kullanılır. -
Content-Length:
Önbelleğe alma özelliğine dahil olmasa da, Önbellek ilkelerini tanımlarken İçerik Uzunluğu başlığı önemlidir. Bazı yazılımlar, önceden yer ayırması gereken içeriğin boyutunu önceden bilmiyorsa, içeriği önbelleğe almayı reddedecektir. -
Vary:
Önbellek genellikle istenen ana bilgisayarı ve kaynağın yolunu önbellek öğesinin depolanacağı anahtar olarak kullanır. Vary üstbilgisi, bir isteğin aynı öğe için olup olmadığına karar verirken önbelleklere ek bir üstbilgiye dikkat etmelerini bildirmek için kullanılabilir. Bu, en çok Accept-Encoding başlığı tarafından anahtarlanacak önbellekleri belirtmek için kullanılır, böylece önbellek sıkıştırılmış ve sıkıştırılmamış içerik arasında ayrım yapabilir.
Cache-Control Header’ının Alabileceği Değerler
-
no-cache
Bir istemciye sunulmadan önce her istek için önbelleğe alınmış içeriğin yeniden doğrulanması gerektiğini belirtir. Bu, aslında, içeriği hemen eski olarak işaretler, ancak tüm öğenin yeniden indirilmesini önlemek için yeniden doğrulama tekniklerini kullanmasına izin verir. -
no-store
İçeriğin hiçbir şekilde önbelleğe alnmaması gerektiğini gösterir. Hassas veriler için kullanılabilir. -
public
Tarayıcı ve herhangi bir önbellek tarafından önbelleğe alınabileceği anlamına gelir. -
private
Kullanıcı tarayıcısı tarafından saklanabilir fakat başka hiçbir ara önbellek tarafından saklanmamalıdır. Kullanıcıya özel bilgiler için kullanılabilir. -
max-age
Bu ayar, içeriğin orijinal sunucudan yeniden doğrulanması veya yeniden indirilmesi gerekmeden önce içeriğin önbelleğe alınabileceği maksimum yaşı yapılandırır. Temelde bu Expires, başlığının yerini alır ve içeriğin tazeliğini belirlemek için kullanılır. Bu seçenek, bir yıllık maksimum geçerli tazelik süresiyle (31536000 saniye) saniye cinsinden değerini alır. -
s-maxage
Bu, max-age ile aynı işlevi görür. Farkı ise, bu seçeneğin yalnızca aracı önbelleklere uygulanmasıdır. -
must-revalidate
Bu,max-age
,s-max-age
veyaexpires
başlığında belirtilen tazelik bilgilerine kesinlikle uyulması gerektiğini belirtir. Eski içerik hiçbir koşulda sunulamaz. Bu, önbelleğe alınmış içeriğin ağ kesintileri ve benzeri senaryolar durumunda kullanılmasını önler. -
proxy-revalidate
Bu, yukarıdaki ayar ile aynı şekilde çalışır, ancak yalnızca aracı proxy’ler için geçerlidir. Bu durumda, kullanıcının tarayıcısı, bir ağ kesintisi durumunda eski içerik sunmak için potansiyel olarak kullanılabilir, ancak ara önbellekler bu amaç için kullanılamaz. -
no-transform
Bu seçenek, önbelleklere, herhangi bir koşul altında performans nedeniyle alınan içeriği değiştirmelerine izin verilmediğini söyler.