Kullanıcı aracısı azaltma nedir?

User-Agent (UA) azaltma, User-Agent dizesinde paylaşılan ve pasif parmak izi oluşturmak için kullanılabilecek tanımlayıcı bilgileri en aza indirir. Bu değişiklikler genel kullanıma sunulduğundan, tüm kaynak isteklerinde daha kısa bir User-Agent başlığı kullanılmaktadır. Sonuç olarak, navigator.userAgent, navigator.appVersion ve navigator.platform dahil olmak üzere belirli Navigator arayüzlerinden döndürülen değerler azaltılır.

Web geliştiricileri, site kodlarında User-Agent dizesinin kullanımını incelemelidir. Siteniz cihaz modelini, platform sürümünü veya tam tarayıcı sürümünü okumak için User-Agent dizesini ayrıştırıyorsa User-Agent İstemci İpuçları API'sini uygulamanız gerekir.

Kullanıcı Aracısı İstemci İpuçları (UA-CH)

Kullanıcı Aracı İstemci İpuçları, yalnızca sunucuların belirli veri parçalarına açıkça ihtiyaç duyduğunu aktif olarak beyan ettiğinde tüm Kullanıcı Aracı verilerine erişime olanak tanır.

Pasif olarak açığa çıkan kullanıcı verilerini kaldırarak istek üstbilgileri, JavaScript API'leri ve diğer mekanizmalar tarafından kasıtlı olarak açığa çıkarılan bilgi miktarını daha iyi ölçer ve azaltırız.

Neden azaltılmış UA ve UA-CH'ye ihtiyacımız var?

Geçmişte User-Agent dizesi, her HTTP isteğiyle birlikte kullanıcının tarayıcısıyla, işletim sistemiyle ve sürümüyle ilgili büyük bir veri dizesi yayınlıyordu. Bu durum iki nedenden dolayı sorunluydu:

  • Ayrıntıların ayrıntı düzeyi ve sayısı, kullanıcıların tanımlanmasına neden olabilir.
  • Bu bilgilerin varsayılan olarak kullanılabilir olması gizli izlemeye neden olabilir.

Azaltılmış UA ve UA-CH, varsayılan olarak yalnızca temel bilgileri paylaşarak kullanıcı gizliliğini iyileştirir.

Azaltılmış User-Agent, tarayıcının markasını ve önemli bir sürümü, isteğin geldiği yeri (masaüstü veya mobil) ve platformu içerir. Daha fazla veriye erişmek için User-Agent istemci ipuçları, kullanıcının cihazı veya koşulları hakkında belirli bilgiler istemenize olanak tanır.

Ayrıca, User-Agent dizesi zaman içinde daha uzun ve karmaşık hale geldi. Bu da dize ayrıştırma işleminin hataya açık olmasına neden oldu. UA-CH, yorumlanması daha kolay olan yapılandırılmış ve güvenilir veriler sağlar. UA dizesini ayrıştıran mevcut kod bozulmaz (ancak daha az veri döndürür) ve sitenizin belirli istemci bilgilerine ihtiyacı varsa UA-CH'ye geçmeniz gerekir.

Azaltılmış UA ve UA-CH nasıl çalışır?

Aşağıda, kısaltılmış User-Agent dizesi ve UA-CH'nin nasıl çalıştığına dair kısa bir örnek verilmiştir. Daha ayrıntılı bir örnek için Kullanıcı Aracısı İstemci İpuçları ile kullanıcı gizliliğini ve geliştirici deneyimini iyileştirme başlıklı makaleyi inceleyin.

Kullanıcı tarayıcıyı açar ve adres çubuğuna example.com yazar:

  1. Tarayıcı, web sayfasını yüklemek için bir istek gönderir.

    1. Tarayıcı, kısaltılmış User-Agent dizesiyle User-Agent üstbilgisini içerir. Örneğin: User-Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.0.0 Mobile Safari/537.36
    2. Tarayıcı, aynı bilgileri varsayılan User-Agent istemci ipucu üstbilgilerine ekler. Örneğin:

      Sec-CH-UA: "Chrome"; v="98"
      Sec-CH-UA-Mobile: ?1
      Sec-CH-UA-Platform: "Android"
      
  2. Sunucu, tarayıcıdan Accept-CH yanıt üstbilgisiyle cihaz modeli gibi ek istemci ipuçları göndermesini isteyebilir. Örneğin: Accept-CH: Sec-CH-UA, Sec-CH-UA-Mobile, Sec-CH-UA-Platform, Sec-CH-UA-Model

  3. Tarayıcı, sonraki istek üstbilgilerinde sunucuya hangi verilerin döndürülebileceğini belirlemek için politikaları ve kullanıcı yapılandırmasını uygular. Örneğin:

    Sec-CH-UA: "Chrome"; v="93"
    Sec-CH-UA-Mobile: ?1
    Sec-CH-UA-Platform: "Android"
    Sec-CH-UA-Model: "Pixel 2"
    

Kritik İstemci İpuçları

İlk isteğinizde belirli bir istemci ipucu grubuna ihtiyacınız varsa Critical-CH yanıt başlığını kullanabilirsiniz. Critical-CH değerleri, Accept-CH tarafından istenen değerlerin alt kümesi olmalıdır.

Örneğin, ilk istek Device-Memory ve Viewport-Width isteği içerebilir. Bu durumda Device-Memory kritik olarak kabul edilir.

GET / HTTP/1.1
Host: example.com

HTTP/1.1 200 OK
Content-Type: text/html
Accept-CH: Device-Memory, Viewport-Width
Vary: Device-Memory, Viewport-Width
Critical-CH: Device-Memory

Tarayıcı, web sayfasını düzgün bir şekilde oluşturmak için kritik bir ipucu (Critical-CH) gerektiriyorsa sunucu, Accept-CH üstbilgisiyle bu ek bilgileri isteyebilir. Ardından tarayıcı, kritik ipucu da dahil olmak üzere sayfa için yeni bir istek gönderebilir.

Özetlemek gerekirse Accept-CH, sayfa için istediğiniz tüm değerleri ister. Critical-CH ise sayfayı düzgün bir şekilde yüklemek için yalnızca yükleme sırasında sahip olmanız gereken değer alt kümesini ister. Daha fazla bilgi için İstemci İpuçları Güvenilirliği spesifikasyonunu inceleyin.

UA-CH API ile tablet cihazları algılama

Mobil, tablet ve masaüstü cihazlar arasındaki çizgi giderek daha belirsiz hale geldikçe ve dinamik form faktörleri (katlanabilir ekranlar, dizüstü bilgisayar ve tablet modu arasında geçiş) daha yaygın hale geldikçe uygun bir kullanıcı arayüzü sunmak için duyarlı tasarım ve özellik algılama özelliklerini kullanmanız önerilir.

Ancak tarayıcı tarafından hem User-Agent dizesi hem de User-Agent istemci ipuçları için sağlanan bilgiler aynı kaynaktan geldiğinden aynı mantık biçimleri işe yarayacaktır.

Örneğin, UA dizesinde bu kalıp kontrol edilirse:

  • Telefon kalıbı: 'Android' + 'Chrome/[.0-9]* Mobile'
  • Tablet kalıbı: 'Android' + 'Chrome/[.0-9]* (?!Mobile)'

Eşleşen varsayılan UA-CH üstbilgi arayüzü kontrol edilebilir:

  • Telefon kalıbı: Sec-CH-UA-Platform: "Android", Sec-CH-UA-Mobile: ?1
  • Tablet deseni: Sec-CH-UA-Platform: "Android", Sec-CH-UA-Mobile: ?0

Veya eşdeğer JavaScript arayüzü:

  • Telefon kalıbı: navigator.userAgentData.platform === 'Android' && navigator.userAgentData.mobile === true
  • Tablet kalıbı: navigator.userAgentData.platform === 'Android' && navigator.userAgentData.mobile === false

Donanıma özgü kullanım alanları için cihaz modeli adı, yüksek entropi Sec-CH-UA-Model ipucu aracılığıyla istenebilir.

Azaltılmış UA'yı nasıl kullanır ve test ederim?

Başlamak için User-Agent dizesinin örnekleri ve kullanımları için site kodunuzu inceleyin. Siteniz, cihaz modelini, platform sürümünü veya tam tarayıcı sürümünü okumak için User-Agent dizesini ayrıştırıyorsa UA-CH API'yi uygulamanız gerekir.

UA-CH API'ye geçtikten sonra, User-Agent'tan beklediğiniz verileri aldığınızdan emin olmak için test yapmanız gerekir. Testin üç yolu vardır ve her biri karmaşıklık açısından birbirinden farklıdır.

Kullanıcı aracısı kısaltma özelliğinin ölçeklendirilmiş kullanılabilirliği, tüm Chrome cihazlarda tamamen kısaltılmış UA dizesinin gönderildiği anlamına gelir. Azaltma, 2022'nin 2. çeyreğindeki küçük bir Chrome sürümüyle başladı.

Özel dizeleri yerel olarak test etme

Farklı cihazları simüle etmek için sitenizi özel User-Agent dizeleri kullanarak test etmek istiyorsanız Chrome'u --user-agent="Custom string here" komut satırı işaretiyle başlatın. Komut satırı işaretleri hakkında daha fazla bilgiyi burada bulabilirsiniz.

Alternatif olarak Chrome Geliştirici Araçları'ndaki cihaz emülatörünü de kullanabilirsiniz.

Sitenizin kodundaki dizeyi dönüştürme

İstemci tarafı veya sunucu tarafı kodunuzda mevcut Chrome user-agent dizesini işlerseniz uyumluluğu test etmek için bu dizeyi yeni biçime dönüştürebilirsiniz. Dilerseniz dizeyi geçersiz kılıp değiştirerek, dilerseniz de yeni sürümü oluşturup yan yana test ederek deneyebilirsiniz.

İstemci ipuçları ve kritik ipuçları için destek

Tarayıcı adı ve büyük sürüm, tarayıcının mobil cihazda olup olmadığını belirten bir boole değeri ve işletim sistemi adı da dahil olmak üzere sunucuya üç varsayılan istemci ipucu döndürülür. Bunlar, Taşıma Katmanı Güvenliği protokolü (TLS) el sıkışmasından sonra gönderilir. Bu özellikler tarayıcınızda zaten mevcut ve desteklenmektedir.

Bununla birlikte, sitenizin oluşturulması için kritik bilgileri almanız gerekebilir.

Kritik ipuçlarını optimize etme

TLS el sıkışması, tarayıcı ile web sunucusu arasında güvenli bir bağlantı oluşturmanın ilk adımıdır. Critical-CH yanıt başlığı, müdahale olmadan ilk istek kritik bir ipucu olmadan gönderilmişse tarayıcıya isteği hemen yeniden denemesini bildirecek şekilde tasarlanmıştır.

Kritik ipuçları içeren istemci ipuçlarının ardışık düzen diyagramı.
Sunucu tarafından kritik bir ipucu istendiğinde istemci, web sayfası için ilk isteği kritik ipucunuzla birlikte göndermeyi yeniden dener. Bu örnekte, Sec-CH-UA-Model için ipucu iki kez istenir: bir kez Accept-CH ile müşteri ipucu olarak ve bir kez de Critical-CH ile kritik ipucu olarak.

Kritik ipuçlarını (Critical-CH başlığı) optimize etmek için bu el sıkışmasını durdurmanız ve istemci ipuçları için bir model sağlamanız gerekir. Bu adımlar karmaşık olabilir ve ileri düzey bilgi gerektirebilir.

ACCEPT_CH HTTP/2 ve HTTP/3 çerçeveleri, TLS ALPS uzantısıyla birlikte, sunucunun istemci ipucu tercihlerini ilk HTTP isteği için zamanında sunmak üzere bağlantı düzeyinde bir optimizasyondur. Bu yöntemler karmaşık yapılandırma gerektirir ve yalnızca gerçekten kritik bilgiler için kullanılmasını öneririz.

BoringSSL (OpenSSL'in çatalı), Google'ın Chromium'daki deneysel özellikleriyle çalışmanıza yardımcı olur. ALPS şu anda yalnızca BoringSSL'de uygulanmaktadır.

Kritik ipuçları kullanmanız gerekiyorsa kritik ipuçları güvenilirliği ve optimizasyonu ile ilgili kılavuzumuza bakın.

SSS

Accept-CH başlığı aracılığıyla belirtilen ipuçları ne kadar süreyle gönderilir?

Accept-CH üst bilgisi aracılığıyla belirtilen ipuçları, tarayıcı oturumu boyunca veya farklı bir ipucu grubu belirtilene kadar gönderilir.

UA-CH, HTTP/2 ve HTTP/3 ile çalışır mı?

UA-CH hem HTTP/2 hem de HTTP/3 bağlantılarıyla çalışır.

Alt alan adlarının (ve CNAME'lerin) yüksek entropili UA-CH'ye erişmek için üst düzey bir sayfa Permissions-Policy gerektirip gerektirmediği

İstek başlıklarındaki yüksek entropili UA-CH, DNS tarafında kaynağın nasıl tanımlandığına bakılmaksızın kaynak arası isteklerde kısıtlanır. Yetkilendirme, kaynaklar arası alt kaynaklar için Permissions-Policy aracılığıyla ele alınmalı veya kaynaklar arası bağlamda yürütülen JavaScript aracılığıyla elde edilmelidir.

Kullanıcı aracısı daraltması, bot algılamayı nasıl etkiler?

Chrome'un User-Agent dizesindeki değişiklik, bir botun göndermeyi seçtiği User-Agent dizesini doğrudan etkilemez.

Bot'lar, Chrome'un gönderdiği azaltılmış bilgileri yansıtacak şekilde kendi dizelerini güncellemeyi seçebilir ancak bu tamamen uygulama tercihlerine bağlıdır. Chrome, aynı User-Agent biçimini göndermeye devam eder ve Chrome User-Agent dizesinin sonuna kendi tanımlayıcılarını ekleyen bot'lar bunu yapmaya devam edebilir.

Belirli botlarla ilgili endişeleriniz varsa doğrudan bot sahiplerine ulaşarak User-Agent dizelerini değiştirme planları olup olmadığını sorabilirsiniz.

Etkileşim kurma ve geri bildirim paylaşma

Daha fazla bilgi