Önbellek Varyasyonları

Genel olarak, bir HTTP cevabı herkes için aynıdır ve her tüketici için aynı değere sahiptir. Veriler kullanıcıya özelse, teoride önbelleklenebilir olmayacaktır. Ancak, bu kuralın istisnaları vardır ve HTTP'nin bunun için bir mekanizması vardır.

HTTP, önbellek varyasyonlarını gerçekleştirmek için Vary başlığını kullanır. Vary başlığı, arka uç tarafından gönderilen bir yanıt başlığıdır. Bu başlığın değeri, değişken olması için kullanılması gereken istek başlığının adını içerir.

Çok yaygın bir örnek, Accept-Language dil tespiti için kullanılır. Tarayıcınız bu başlığı her istek üzerine gönderecektir. Tarayıcınızın desteklediği bir dizi dil veya yerel ayar içerir. Uygulamanız daha sonra çıktının dilini belirlemek için bu başlığın değerini kullanabilir. İstenilen dil URL’de veya bir çerezde görünmüyorsa, bilmenin tek yolu Accept-Language kullanmaktır.

Vary başlığı ayarlanmamışsa, önbellek (tarayıcı önbelleği veya herhangi bir aracı önbellek), farkı tanımlamanın bir yolu yoktur ve nesneyi ilk isteğe göre depolar. Bu ilk istek Hollandaca yapılırsa, önbellek kullanım ömrü boyunca tarayıcı dili ne olursa olsun diğer tüm kullanıcılara Hollandaca çıkacaktır.

Bu ciddi bir sorundur, bu durumda uygulama, Accept-Language kendi değeri olarak içeren bir Vary başlığı döndürür. İşte bir örnek:

GET / HTTP/1.1
Host: localhost
Accept-Language: nl

Uygulama, önbelleğe, isteğin Accept-Language değerini temel alarak önbelleğe alınmış nesnenin ayrı bir sürümünü tutmasını bildiren bir Vary başlığı belirler.

HTTP/1.1 200 OK
Host: localhost
Vary: Accept-Language
Hallo, deze pagina is in het Nederlands geschreven

Önbellek, bu kaynağın Hollanda dilinde bir sürümü olduğunu bilir ve ayrı olarak depolar. Bir sonraki istek yalnızca İngilizce'yi destekleyen bir tarayıcıdan gönderildiğinde, Hollandaca çıktı içeren önbellek nesnesi kullanılmayacaktır. Yeni bir arka uç isteği yapılacak ve çıktı ayrı olarak depolanacak.

Varnish, Vary başlığını dikkate alır ve standart tanımlayıcıların üstündeki önbellekte varyasyonlar ekler. Önbelleğe alınmış bir nesnenin tipik tanımlayıcıları, web site adı (veya hiçbir site adı belirlenmemişse IP) ve URL'dir. Varnish bir önbellek varyasyonu fark ettiğinde, bu sürüm için bir önbellek nesnesi oluşturur.

Last updated