İ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