Cloudflare, Free, Pro, Business ve Enterprise dahil tüm planlarında HTTP yanıt başlığı Vary desteğini Cache Rules özelliğine eklediğini duyurdu. Bu ekleme, site yöneticilerine ağın aynı kaynak için birden fazla temsile yol açabilecek istekleri nasıl ele alacağı konusunda daha fazla kontrol sağlıyor. Bu durum; dil, görsel biçimi, içerik türü veya sıkıştırma yöntemi gibi farklılıklardan kaynaklanabilir.
Kaynak sunucu, Vary aracılığıyla yanıtı etkileyebilecek istek başlıklarını belirtir; ancak bu başlık, söz konusu başlıkların değerleri arasındaki tüm metinsel farklılıkların gerçekten farklı bir yanıta yol açıp açmadığını açıklamaz. Bu nedenle önbellek sistemi, birbirine yakın değerleri bağımsız sürümler olarak ele alabilir ve içeriği yeniden kullanım oranı düşük çok sayıda öğeye bölebilir.
Farklılıkları ele almanın üç yöntemi
Cloudflare, kaynağın Vary içinde belirttiği her başlık için üç işlemden birini sunuyor:
- normalize: Önbelleğe alınmış sürümü seçmeden önce değerleri normalleştirir. Çok sayıda değerin sınırlı sayıda yanıta dönüştüğü Accept, Accept-Language ve Accept-Encoding gibi içerik anlaşması başlıkları için önerilen seçenektir.
- passthrough: Yanıtı etkileyen kesin farklılıklar olduğunda büyük-küçük harf durumu, boşluklar, sıralama ve yinelenen değerler dahil ham değeri kullanır.
- bypass: Cookie veya User-Agent gibi kişisel ya da yüksek çeşitliliğe sahip bir başlık Vary içinde belirtilmişse yanıtı önbelleğe almaz.
Vary: * ise her zaman önbelleğe almayı atlar; çünkü IP adresi gibi HTTP mesajının dışındaki bilgiler de dahil olmak üzere isteğin herhangi bir bölümü, kaynağın yanıt seçimini etkileyebilir.
Uygulamada ne değişiyor?
Normalleştirme kullanıldığında, biçimsel olarak farklı olsa da aynı sonucu tercih eden istekler önbelleğe alınmış sürümü paylaşabilir. Cloudflare, Accept, Accept-Language ve Accept-Encoding değerlerini birleşik bir biçime indirger; değerleri küçük harfe çevirir ve kalite önceliğine göre sıralar, eşitlik durumunda ise alfabetik sıralama uygular. Yönetici ayrıca text/html ve application/json gibi medya türlerini veya en, fr ve de gibi desteklenen dilleri belirleyebilir.
Ancak bu davranış, kaynağın ihtiyaç duyduğu farklılıkları ortadan kaldırabilir. Cloudflare, q=0 değerlerinin veya bazı dil istisnalarının kısaltma sırasında kaybolabileceğini belirtiyor. Bu nedenle kaynak, bu dışlamaları istemcinin gönderdiği biçimde görmeye ihtiyaç duyuyorsa passthrough kullanılmalıdır. Ham değerlerin iletilmesi de parçalanma sorununu yeniden ortaya çıkarabilir; örneğin compact,full ve compact, full değerleri, kaynak bunları eşdeğer kabul etse bile farklı önbellek anahtarları oluşturabilir.
Kaynağın sorumluluğu ve güncellemenin sınırları
Kaynak, istek başlıklarına göre farklılık gösterebilecek her önbelleğe alınabilir yanıtla, yedek yanıtlar ve hatalar dahil, tutarlı biçimde Vary döndürmelidir. Yanıtlardan biri uygun başlığı içermezse Cloudflare bu yanıtı gerekli ayrım olmadan önbelleğe alabilir.
Vary ayarlarının değiştirilmesi mevcut içeriği otomatik olarak silmez; eski girdiler süreleri dolana veya bir purge işlemi gerçekleştirilene kadar kalabilir. Ayrıca Vary ayarı her durumda özel önbellek anahtarının yerini almaz: Cloudflare, istek özelliği kaynak kimliğinin sabit bir parçası olduğunda özel anahtar kullanılmasını; kaynak, hangi alanların yanıtı gerçekten etkilediğini yanıt üzerinden bildirdiğinde ise Vary kullanılmasını öneriyor.
Bu haber neden önemli?
Güncelleme, CDN ağlarındaki pratik bir dengeyi ele alıyor: Vary'ı yok saymak istemciye yanlış biçim veya dil gönderebilirken, her değerle kelimesi kelimesine ilgilenmek önbellek isabet oranını düşürebilir ve kaynağa dönen istekleri artırabilir. Habere göre, yaklaşık 50 bin popüler siteden alınan 120 milyondan fazla yanıtın analizi, yaklaşık 3 bin sitenin dört veya daha fazla alan üzerinden varyasyon kullandığını; bazı sitelerin ise bunu 10, 23 veya 47 alan üzerinden yaptığını gösterdi.
Fayda, kaynağın sunduğu temsilleri ne kadar iyi tanımladığına ve her başlık için uygun işlemin seçilmesine bağlı olmaya devam ediyor. Ayarlar Cloudflare paneli, Rulesets API veya Terraform üzerinden kullanılabilir; dağıtımdan sonra farklı değerlerin test edilmesi ve CF-Cache-Status değerinin izlenmesi gerekiyor.