Kullanıcı Aracısı İstemci İpuçları ile kullanıcı gizliliğini ve geliştirici deneyimini iyileştirme

İstemci İpuçları API'sinin yeni bir uzantısı olan kullanıcı aracısı istemci ipuçları, geliştiricilerin kullanıcının tarayıcısıyla ilgili bilgilere gizliliği koruyan ve ergonomik bir şekilde erişmesini sağlar.

İstemci İpuçları, geliştiricilerin, cihazı veya koşulları kullanıcı aracısı (UA) dizesinden ayrıştırmak yerine, kullanıcının cihazı veya koşulları hakkında etkin bir şekilde bilgi istemesini sağlar. Bu alternatif rotanın sağlanması, kullanıcı aracısı dizesi ayrıntı düzeyini azaltmanın ilk adımıdır.

Bunun yerine Kullanıcı Aracısı İstemci İpuçlarından yararlanmak için kullanıcı aracısı dizesini ayrıştırmaya dayanan mevcut işlevlerinizi nasıl güncelleyeceğinizi öğrenin.

Arka plan

Web tarayıcıları istekte bulunduğunda, tarayıcı ve ortamı hakkında bilgiler de ekler. Böylece sunucular analizleri etkinleştirebilir ve yanıtı özelleştirebilir. Bu, 1996'da (HTTP/1.0 için RFC 1945) baştan sona tanımlandı. Burada, bir örnek içeren User-Agent dizesinin orijinal tanımını bulabilirsiniz:

User-Agent: CERN-LineMode/2.15 libwww/2.17b3

Bu başlık, ürünü (ör. tarayıcı veya kitaplık) ve bir yorumu (ör. sürüm) önem sırasına göre belirtmek için tasarlanmıştır.

User-Agent dizesinin durumu

Aradan onlarca boyunca, bu dize, isteği yapan istemci hakkında çeşitli ek ayrıntılar (ve geriye dönük uyumluluk nedeniyle hatalıdır) biriktirmiştir. Chrome'un mevcut User-Agent dizesine baktığımızda

Mozilla/5.0 (Linux; Android 10; Pixel 3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4076.0 Mobile Safari/537.36

Yukarıdaki dizede kullanıcının işletim sistemi ve sürümü, cihaz modeli, tarayıcının markası ve tam sürümü ile ilgili bilgiler, ayrıca sitenin bir mobil tarayıcı olduğu çıkarımına yetecek kadar ipucu yer alır ve geçmişe dönük nedenlerle diğer tarayıcılara yapılan atıflardan bahsedilmez.

Bu parametrelerin olası değerlerin tam çeşitliliğiyle birleştirilmesi, User-Agent dizesinin tek tek kullanıcıların benzersiz şekilde tanımlanmasını sağlayacak kadar bilgi içerebileceği anlamına gelir.

User-Agent dizesi, birçok geçerli kullanım alanına olanak tanır ve geliştiriciler ile site sahipleri için önemli bir amaca hizmet eder. Bununla birlikte, kullanıcıların gizliliğinin gizli izleme yöntemlerine karşı korunması da son derece önemlidir ve UA bilgilerinin varsayılan olarak gönderilmesi bu hedefe aykırıdır.

Söz konusu User-Agent dizesi söz konusu olduğunda web uyumluluğunun iyileştirilmesi de gerekir. Yapılandırılmamış olduğundan ayrıştırmak gereksiz karmaşıklığa neden olur. Bu da genellikle kullanıcılara zarar veren hataların ve site uyumluluğu sorunlarının nedenidir. Bu sorunlar ayrıca, daha seyrek kullanılan tarayıcıların kullanıcılarına orantısız bir şekilde zarar verir. Zira siteler, yapılandırmalarını test edememiştir.

Yeni Kullanıcı Aracısı İstemci İpuçları ile tanışın

Kullanıcı Aracısı İstemci İpuçları aynı bilgilere erişim sağlarken gizliliği daha koruyan bir şekilde tarayıcıların her şeyi yayınlama varsayılanını kullanıcı aracısı dizesinin nihayetinde azaltmasını sağlar. İstemci İpuçları, sunucunun tarayıcıdan istemci hakkında bir dizi veri (ipuçları) istemesi ve tarayıcının hangi verilerin döndürüleceğini belirlemek için kendi politikalarını veya kullanıcı yapılandırmasını uyguladığı bir modeli uygular. Bu, erişimin varsayılan olarak tüm Kullanıcı Aracısı bilgilerinin gösterilmesi yerine açık ve denetlenebilir bir şekilde yönetildiği anlamına gelir. Geliştiriciler de daha basit bir API'den yararlanabilir. Artık düzenli ifadelere gerek yok.

Mevcut İstemci İpuçları grubu, birincil olarak tarayıcının görüntüleme ve bağlantı özelliklerini açıklar. İstemci İpuçlarıyla Kaynak Seçimini Otomatikleştirme bölümünde ayrıntıları inceleyebilirsiniz. Ancak süreçle ilgili kısa bir hatırlatmayı aşağıda bulabilirsiniz.

Sunucu, bir başlık aracılığıyla belirli İstemci İpuçlarını ister:

⬇️ Sunucudan yanıt

Accept-CH: Viewport-Width, Width

Veya bir meta etiket:

<meta http-equiv="Accept-CH" content="Viewport-Width, Width" />

Daha sonra tarayıcı, sonraki isteklerde aşağıdaki üstbilgileri geri göndermeyi seçebilir:

⬆️ Sonraki istekler

Viewport-Width: 460
Width: 230

Sunucu, uygun bir çözünürlükte resim sunmak gibi yöntemlerle, yanıtlarını çeşitlendirmeyi seçebilir.

Kullanıcı Aracısı İstemci İpuçları, Accept-CH sunucu yanıtı başlığı aracılığıyla belirtilebilen Sec-CH-UA önekiyle özellik aralığını genişletir. Tüm ayrıntılar için açıklayıcıyla başlayın ve ardından teklifin tamamını ayrıntılı şekilde inceleyin.

Chromium 89'daki Kullanıcı Aracısı İstemci İpuçları

Kullanıcı Aracısı İstemci İpuçları, 89 sürümünden itibaren Chrome'da varsayılan olarak etkindir.

Tarayıcı, varsayılan olarak tarayıcı markasını, önemli / ana sürümü, platformu ve istemci mobil cihaz ise bir göstergeyi döndürür:

⬆️ Tüm istekler

Sec-CH-UA: "Chromium";v="93", "Google Chrome";v="93", " Not;A Brand";v="99"
Sec-CH-UA-Mobile: ?0
Sec-CH-UA-Platform: "macOS"

User-Agent yanıtı ve istek başlıkları

⬇️ Yanıt Accept-CH
⬆️ İstek başlığı
⬆️ İstek
Örnek değer
Açıklama
Sec-CH-UA "Chromium";v="84",
"Google Chrome";v="84"
Tarayıcı markalarının ve önemli versiyonlarının listesi.
Sec-CH-UA-Mobile ?1 Tarayıcının mobil cihazda olup olmadığını (doğru için ?1) veya olmadığını (yanlış için ?0) gösteren boole değeri.
Sec-CH-UA-Full-Version "84.0.4143.2" [Kullanımdan kaldırıldı]Tarayıcının tam sürümü.
Sec-CH-UA-Full-Version-List "Chromium";v="84.0.4143.2",
"Google Chrome";v="84.0.4143.2"
Tarayıcı markalarının ve tam sürümlerinin listesi.
Sec-CH-UA-Platform "Android" Cihazın platformu, genellikle işletim sistemidir (OS).
Sec-CH-UA-Platform-Version "10" Platformun veya işletim sisteminin sürümü.
Sec-CH-UA-Arch "arm" Cihazın temel mimarisi. Bu, sayfanın görüntülenmesiyle alakalı olmayabilir ancak site, varsayılan olarak doğru biçimde olan bir indirme olanağı sunmak isteyebilir.
Sec-CH-UA-Model "Pixel 3" Cihazın modeli.
Sec-CH-UA-Bitness "64" Temel mimarinin bitliği (ör. bir tam sayı veya bellek adresinin bit cinsinden boyutu)

Örnek exchange

Örnek bir exchange aşağıdaki gibi görünür:

⬆️ Tarayıcıdan ilk istek
Tarayıcı, siteden /downloads sayfasını ister ve varsayılan temel kullanıcı aracısını gönderir.

GET /downloads HTTP/1.1
Host: example.site

Sec-CH-UA: "Chromium";v="93", "Google Chrome";v="93", " Not;A Brand";v="99"
Sec-CH-UA-Mobile: ?1
Sec-CH-UA-Platform: "Android"

⬇️ Sunucudan yanıt
Sunucu sayfayı geri gönderir ve ayrıca tarayıcının tam sürümü ile platformu ister.

HTTP/1.1 200 OK
Accept-CH: Sec-CH-UA-Full-Version-List

⬆️ Sonraki istekler
Tarayıcı, sunucuya ek bilgilere erişim izni verir ve ekstra ipuçlarını sonraki tüm isteklerde geri gönderir.

GET /downloads/app1 HTTP/1.1
Host: example.site

Sec-CH-UA: " Not A;Brand";v="99", "Chromium";v="98", "Google Chrome";v="98"
Sec-CH-UA-Mobile: ?1
Sec-CH-UA-Full-Version-List: " Not A;Brand";v="99.0.0.0", "Chromium";v="98.0.4738.0", "Google Chrome";v="98.0.4738.0"
Sec-CH-UA-Platform: "Android"

JavaScript API

User-Agent'a başlıkların yanı sıra navigator.userAgentData aracılığıyla JavaScript'te de erişilebilir. Varsayılan Sec-CH-UA, Sec-CH-UA-Mobile ve Sec-CH-UA-Platform üst bilgi bilgilerine sırasıyla brands ve mobile özellikleri üzerinden erişilebilir:

// Log the brand data
console.log(navigator.userAgentData.brands);

// output
[
  {
    brand: 'Chromium',
    version: '93',
  },
  {
    brand: 'Google Chrome',
    version: '93',
  },
  {
    brand: ' Not;A Brand',
    version: '99',
  },
];

// Log the mobile indicator
console.log(navigator.userAgentData.mobile);

// output
false;

// Log the platform value
console.log(navigator.userAgentData.platform);

// output
"macOS";

Ek değerlere getHighEntropyValues() çağrısıyla erişilebilir. "Yüksek entropi" terimi, bilgi entropisi anlamına gelir. Başka bir deyişle, bu değerlerin kullanıcının tarayıcısı hakkında gösterdiği bilgi miktarıdır. Ek üst bilgileri isterken olduğu gibi, hangi değerlerin (varsa) döndürüldüğüne bağlıdır.

// Log the full user-agent data
navigator
  .userAgentData.getHighEntropyValues(
    ["architecture", "model", "bitness", "platformVersion",
     "fullVersionList"])
  .then(ua => { console.log(ua) });

// output
{
   "architecture":"x86",
   "bitness":"64",
   "brands":[
      {
         "brand":" Not A;Brand",
         "version":"99"
      },
      {
         "brand":"Chromium",
         "version":"98"
      },
      {
         "brand":"Google Chrome",
         "version":"98"
      }
   ],
   "fullVersionList":[
      {
         "brand":" Not A;Brand",
         "version":"99.0.0.0"
      },
      {
         "brand":"Chromium",
         "version":"98.0.4738.0"
      },
      {
         "brand":"Google Chrome",
         "version":"98.0.4738.0"
      }
   ],
   "mobile":false,
   "model":"",
   "platformVersion":"12.0.1"
}

Demo

Hem üstbilgileri hem de JavaScript API'yi kendi cihazınızda user-agent-client-hints.glitch.me adresinden deneyebilirsiniz.

Kullanım süresi ve sıfırlama için ipucu

Accept-CH başlığı aracılığıyla belirtilen ipuçları, tarayıcı oturumu süresince veya farklı ipuçları belirtilene kadar gönderilir.

Bu, sunucu şunları gönderirse:

⬇️ Yanıt

Accept-CH: Sec-CH-UA-Full-Version-List

Ardından tarayıcı, kapatılana kadar söz konusu siteye yönelik tüm isteklerde Sec-CH-UA-Full-Version-List üstbilgisini gönderir.

⬆️ Sonraki talepler

Sec-CH-UA-Full-Version-List: " Not A;Brand";v="99.0.0.0", "Chromium";v="98.0.4738.0", "Google Chrome";v="98.0.4738.0"

Bununla birlikte, başka bir Accept-CH üstbilgisi alınırsa bu, tarayıcının gönderdiği mevcut ipuçlarının tamamen yerini alır.

⬇️ Yanıt

Accept-CH: Sec-CH-UA-Bitness

⬆️ Sonraki talepler

Sec-CH-UA-Platform: "64"

Daha önce istenen Sec-CH-UA-Full-Version-List gönderilmeyecek.

Accept-CH başlığını, söz konusu sayfa için istenen tüm ipuçları grubunu belirten bir başlık olarak düşünebilirsiniz. Bu, tarayıcının daha sonra söz konusu sayfadaki tüm alt kaynaklar için belirtilen ipuçlarını göndermesi anlamına gelir. İpuçları bir sonraki gezinmede kullanılmaya devam edecek olsa da site, yayınlanacaklarına güvenmemeli veya bunları varsaymamalıdır.

Bunu, yanıtta boş bir Accept-CH göndererek tarayıcı tarafından gönderilen tüm ipuçlarını etkili bir şekilde temizlemek için de kullanabilirsiniz. Bunu, kullanıcının tercihlerini sıfırladığı veya sitenizde oturumu kapattığı her yere eklemeyi düşünün.

Bu kalıp, ipuçlarının <meta http-equiv="Accept-CH" …> etiketi aracılığıyla çalışma şekliyle de eşleşir. İstenen ipuçları yalnızca sayfa tarafından başlatılan isteklerde gönderilir, sonraki gezinmelerde gönderilmez.

İpucu kapsamı ve kaynaklar arası istekler

Varsayılan olarak, İstemci İpuçları yalnızca aynı kaynak isteklerde gönderilir. Yani https://example.com hakkında belirli ipuçları isterseniz ancak optimize etmek istediğiniz kaynaklar https://downloads.example.com üzerindeyse ipucu almaz.

Kaynaklar arası isteklerde ipuçlarına izin vermek için her ipucu ve kaynak bir Permissions-Policy başlığıyla belirtilmelidir. Bunu bir Kullanıcı Aracısı İstemci İpucuna uygulamak için ipucunda küçük harf kullanmanız ve sec- önekini kaldırmanız gerekir. Örneğin:

⬇️ example.com tarafından gönderilen yanıt

Accept-CH: Sec-CH-UA-Platform-Version, DPR
Permissions-Policy: ch-ua-platform-version=(self "downloads.example.com"),
                    ch-dpr=(self "cdn.provider" "img.example.com");

⬆️ downloads.example.com isteği

Sec-CH-UA-Platform-Version: "10"

⬆️ cdn.provider veya img.example.com istekleri

DPR: 2

Kullanıcı Aracısı İstemci İpuçları nerede kullanılır?

Hızlı yanıt, Kullanıcı Aracısı başlığını ayrıştırdığınız veya aynı bilgilere erişen JavaScript çağrılarından herhangi birini kullandığınız (ör. navigator.userAgent, navigator.appVersion veya navigator.platform) örnekleri yeniden düzenleyerek bunun yerine Kullanıcı Aracısı İstemci İpuçlarından yararlanmanız gerektiğidir.

Bu yöntemi bir adım ileriye taşıyarak, User-Agent bilgilerini kullanımınızı yeniden incelemeli ve mümkünse bu bilgileri diğer yöntemlerle değiştirmelisiniz. Genellikle progresif geliştirme, özellik algılama veya duyarlı tasarımdan yararlanarak aynı hedefe ulaşabilirsiniz. Kullanıcı Aracısı verilerine güvenmenin temel sorunu, incelediğiniz mülk ile bu mülkün etkinleştirdiği davranış arasında her zaman bir eşleme sürdürüyor olmanızdır. Bu, algılamanızın kapsamlı olduğundan ve güncel kalmasını sağlamak için ek bakım masraflarıdır.

Bu uyarılar göz önünde bulundurularak, Kullanıcı Aracısı İstemci İpuçları deposu, siteler için bazı geçerli kullanım alanlarını listeler.

User-Agent dizesine ne olur?

Planın amacı, mevcut sitelerde gereksiz kesintiye neden olmadan mevcut User-Agent dizesi tarafından açığa çıkan tanımlayıcı bilgi miktarını azaltarak web'de gizli izleme özelliğini en aza indirmektir. Kullanıcı Aracısı İstemci İpuçları ile kullanıma sunulduğunda, artık Kullanıcı Aracısı dizelerinde herhangi bir değişiklik yapmadan önce yeni özelliği anlama ve deneme şansına sahip olursunuz.

Sonuç olarak User-Agent dizesindeki bilgiler azaltılır. Böylece, eski biçimi korurken bir yandan da varsayılan ipuçlarına göre yalnızca aynı üst düzey tarayıcı ve önemli sürüm bilgilerini sağlar. Chromium'da bu değişiklik, ekosistemin yeni Kullanıcı Aracısı İstemci İpuçları özelliklerini değerlendirmesi için ek süre sağlamak amacıyla en az 2022'ye ertelenmiştir.

Chrome 93'ten about://flags/#reduce-user-agent işaretini etkinleştirerek bunun bir sürümünü test edebilirsiniz (Not: Chrome 84 - 92 sürümlerinde bu işaret about://flags/#freeze-user-agent olarak adlandırılmaktadır). Bu, uyumluluk nedeniyle geçmiş girişleri içeren, ancak daha spesifik ayrıntılar içeren bir dize döndürür. Örneğin:

Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Mobile Safari/537.36

Sergey Zolkin'in Unsplash'teki küçük resim