Bu sayfa otomatik olarak çevrildi. Orijinal İngilizce sürümü buradan okuyun.

Passkeys Cheat Sheet. Passkey programları için pratik rehberler, geçiş kalıpları ve KPI'lar.
navigator.userAgentData'yı desteklemez, bu da geliştiricilerin Mozilla'nın tarayıcısında klasik User-Agent dizisi ayrıştırmasına (parsing) geri dönmesini gerektirir.getHighEntropyValues() JavaScript API'si, yüksek entropili cihaz verilerine yalnızca Chromium tarayıcılarında erişir. Safari ve Firefox'ta bu API tamamen eksiktir.Farklı kullanıcı ortamlarını tespit etme ve bunlara yanıt verme yöntemleri sürekli olarak değişmektedir. Geleneksel olarak, User-Agent dizeleri, tarayıcı ve cihaz bilgilerini tanımlamanın yolu olmuş ve web sitelerinin deneyimleri buna göre uyarlamasına olanak sağlamıştır. Ancak bu dizeler genellikle pazarlama nedenleriyle kullanıcıların rızası olmadan parmak izi alma (fingerprinting) ve kimliklerini belirleme amacıyla kullanılmış ve bu durum gizlilik endişelerini artırmıştır.
Bu bağlamda, JavaScript API'leri olarak Client Hints (İstemci İpuçları) bir araç olarak ortaya çıkmış, kullanıcının cihazı ve tercihleri hakkında gerekli bilgileri paylaşmanın daha kontrollü ve gizliliğe saygılı bir yolunu sunmuştur. Bu makale, User-Agent daraltmasının sonuçlarına odaklanmakta ve Client Hints'in bu yeni duruma uyum sağlamaya nasıl yardımcı olduğunu incelemektedir.
Ele alacağımız kilit noktalar:
Tarayıcılar ve işletim sistemleri farklı duruşlara sahip oldukça ve yaklaşımlarını farklı şekillerde uyarladıkça, yazılım geliştiricileri, uygulamalarının tarayıcılar ve işletim sistemleri genelinde değişen kullanıcı ortamlarını hala doğru bir şekilde tespit edip bunlara yanıt verebilmesini sağlama zorluğuyla karşı karşıya kalmaktadır.
Bu makale, geliştiricilere kullanım senaryoları veya yazılımları cihaz veya işletim sistemleri ayrıntılarına (ör. ayrıntılı cihaz yönetimi, bilinen cihazları tespit etme, dolandırıcılığı önleme veya diğer özellik tespitleri) bağlıysa ya da bizim durumumuzda olduğu gibi User-Agent ve Client Hints ile geçiş anahtarı deneyimini optimize etmek istiyorlarsa içgörüler ve pratik rehberlik sunarak bu değişikliklere kapsamlı bir genel bakış sağlamayı amaçlamaktadır.
Son makaleler
⚙️
Karşılaştırmalı 9 WebAuthn Sunucu Uygulama Kütüphanesi
📖
Parallels Geçiş Anahtarları: Mac Üzerinde Windows 11 VM'de Çapraz Cihaz Kimlik Doğrulaması Testi
⚙️
Chrome, Safari ve Firefox'ta Client Hints ve User-Agent
⚙️
Geliştiriciler için Geçiş Anahtarları Kopya Kağıdı
👤
Apple, Windows ve Android'de Geçiş Anahtarı Nasıl Silinir
Client Hints ile ilgili teknik ayrıntılara girmeden önce, User-Agent'ın geçmişini ve farklı User-Agent daraltma çabalarının nasıl çalıştığını kısaca inceleyeceğiz.
User-Agent dizelerinin tarihi, ilk web tarayıcılarının başlangıcına kadar izlenebilir. Tim Berners-Lee, ilk web tarayıcısı olan WorldWideWeb'i (daha sonra Nexus olarak yeniden adlandırıldı) 1990 yılında geliştirdi. Bunu kısa süre sonra 1991'de Line Mode Browser gibi diğer öncü tarayıcılar izledi ve sonrasında MidasWWW, ViolaWWW, Erwise ve Cello gibi tarayıcılar ortaya çıktı.
Genellikle sadece Mosaic olarak anılan NCSA Mosaic'in 1993'teki sürümü, web popülaritesindeki ilk artışı ateşlemesiyle bilinir. Mosaic'in User-Agent dizesi oldukça basitti; tipik olarak ürün adını, ardından isteğe bağlı bir eğik çizgi ve sürüm numarasını içeren NCSA_Mosaic/1.0 formatındaydı.
Başlangıçta, User-Agent alanı analitik amaçlarla ve sorunların belirlenmesine yardımcı olmak için tanıtıldı. 1992'deki W3C HTTP arşivinde belirtildiği gibi, bu alanın HTTP isteklerine "dahil edilmesi gerektiği" açıkça tavsiye edilmiştir. Bu basit alan, ürün adını ve sürümünü iletmek için basit ancak etkili bir yol sağlayarak tarayıcıyla ilgili sorunların anlaşılmasına ve giderilmesine yardımcı olmuştur.
Web geliştikçe User-Agent dizelerinin karmaşıklığı ve kullanımı da arttı. Daha ayrıntılı hale geldiler ve tarayıcı, işletim sistemi ve cihaz hakkında zengin bilgiler içermeye başladılar. Bu bilgiler web analitiği ve kullanıcı deneyimlerini optimize etmek için değerli olsa da, aynı zamanda önemli gizlilik endişelerini de beraberinde getirdi. Ayrıntılı User-Agent dizeleri, cihaz parmak izi alımına izin vererek reklamverenlerin ve izleyicilerin kullanıcıların benzersiz profillerini oluşturmasına ve farklı web sitelerindeki çevrimiçi etkinliklerini izlemesine olanak tanıdı.
Gizliliğin hem kullanıcılar hem de düzenleyiciler için önemli bir endişe kaynağı haline geldiği modern çağda, User-Agent dizelerinin ayrıntılı doğası giderek sorunlu olarak görülmeye başlandı. Bu farkındalık, web işlevselliği için gerekli bilgileri sağlamak ile kullanıcı gizliliğini korumak arasında bir denge kurmayı amaçlayarak User-Agent dizelerinin ayrıntı düzeyini azaltma çabalarına yol açmıştır. Bu geçiş, gizlilik risklerini azaltmak ve güvenliği artırmak için User-Agent dizelerinde paylaşılan bilgileri en aza indirmeye yönelik bir hareket olan User-Agent daraltmasının başlangıcını işaret etmektedir.
User-Agent daraltmasına yönelik hareket, artan gizlilik endişelerine bir yanıt olarak başladı. İşte bu evrimdeki önemli kilometre taşlarının kronolojik bir özeti:
2017 yılında Apple, parmak izi almayla mücadele etmeyi ve gizliliği artırmayı amaçlayarak Safari'nin Safari Technology Preview 46'da (STP 46) User-Agent dizesini donduracağını duyurduğu ünlü bir Twitter gönderisiyle User-Agent daraltma hareketini başlattı.
Ancak bu karar, güncel User-Agent bilgilerine dayanan web sitelerinde yaşanan önemli uyumluluk sorunları nedeniyle daha sonra 2021'de kısmen geri alındı.
2019/2020 yıllarında, Google Chrome'daki User-Agent dizelerinin ayrıntı düzeyini azaltma planlarını duyurdu ve belirli tarayıcı ile cihaz bilgilerini istemek için esnek ve kontrollü bir yol olarak User-Agent Client Hints (UA-CH) API'sini tanıttı. Google, uyumluluk ve işlevselliği sağlamak için geri bildirim toplayarak Chrome Canary ve Beta sürümlerinde User-Agent daraltmasını test etmeye başladı ve Android ile diğer tüm Chrome platformları için 2023 yılında tamamladı. Aynı zamanda, bu bilgilere erişmenin yeni bir yolu olarak Chrome Client Hints'i tanıttı. Microsoft Edge, Chromium tabanlı olduğundan tüm platformlarda Chrome gibi davranır.
2021 yılında Mozilla da bu çabaya katılarak User-Agent dizesinin ayrıntı düzeyini kademeli olarak azalttı, ancak Firefox'ta Client Hints'i desteklememeye karar verdi.
User-Agent Daraltması tarayıcıya göre değişir: Chromium (Chrome, Edge), Client Hints desteğiyle tam UA daraltması uygulamıştır. Ancak Safari, UA-CH'yi benimsemeden kendi dondurulmuş UA yaklaşımını kullanırken Firefox navigator.userAgentData API'sini uygulamamıştır. Ekosistem parçalanmış durumdadır.
Client Hints, Chromium içinde evrim geçirdi: Tüm tarayıcılar hala bir User-Agent başlığı (header) gönderir, ancak çoğunda bu daha eski bir sürüme dondurulmuştur (aşağıdaki tabloya bakın). Chromium için Client Hints, daha fazla bilgi edinmek amacıyla kullanılabilir.
Sonraki bölümde tarayıcıların şu anda User-Agent olarak ne gönderdiklerine bir göz atalım.
Son haberler için Passkeys Substack'e abone olun.
User-Agent Daraltması denildiğinde kastedilen, User-Agent dizesindeki bilgilerin azaltılmasıdır. Daraltmadan önce User-Agent'a nelerin yerleştirildiğini öğrenmek için daha derinlere inelim.
Klasik bir User-Agent dizesi, işlevselliği tespit etmek için kullanılabilecek tipik olarak aşağıdaki bileşenleri içeriyordu:
Mozilla/5.0 (Linux; Android 13; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.2.1.0 Mobile Safari/537.36
Tarihsel olarak, User-Agent dizeleri genellikle özellik ve platform tespiti için kullanılmış ve web sitelerinin içeriklerini ile işlevlerini tespit edilen tarayıcı ve cihaz özelliklerine göre (ör. belirli bir ikili dosya (binary) için hangi indirmenin sunulacağını belirlemek) uyarlamasına olanak tanımıştır. Bu, cep telefonlarının özel sürümlerine yönlendirebilmek amacıyla duyarlı (responsive) olarak oluşturulmayan düzenler için cep telefonlarının ve tabletlerin yükselişiyle özellikle önemli hale geldi.
Ancak günümüzde bu yaklaşım, tarayıcı yetenekleri hakkında doğru olmayabilecek veya yeterince spesifik olmayabilecek varsayımlara dayandığından, optimal altı (suboptimal) olarak kabul edilmektedir. Modern web geliştirme uygulamaları, belirli tarayıcı özelliklerini ve yeteneklerini doğrudan kontrol etmek için mümkün olduğunda tarayıcı API'leri aracılığıyla özellik tespiti kullanılmasını savunmaktadır. Bu yöntem daha güvenilirdir ve User-Agent dizesinden veya tarayıcı sürümünden bağımsız olarak web sitelerinin doğru çalışmasını sağlar. Özellik tespiti, tarayıcı davranış ve işlevlerindeki farklılıkları ele almak için daha sağlam ve geleceğe dönük bir yol sağlayarak tarayıcının gerçek yeteneklerine odaklanır.
İşlevselliği algılamak için yeni tarayıcı API'leri farklı zamanlarda uygulandığından ve çoğu zaman daha büyük (ör. Chromium tabanlı tarayıcılar) ile daha küçük tarayıcı ekipleri (ör. Firefox) arasında farklı bir yaklaşım olduğundan bugüne kadar bu tam olarak mümkün olmamıştır.
Daha fazla bilgi, bir web sitesine daha fazla "entropi" ile bir parmak izi oluşturma konusunda daha geniş bir olasılık verir. Bu bağlamdaki entropi, bir web sitesindeki farklı ziyaretçiler arasında benzersiz bir parmak izi oluşturmak için kullanılabilecek varyasyon miktarıdır.
Bir parmak izi farklı amaçlar için kullanılabilir. Yeni cihazları tanımlayarak dolandırıcılığı tespit etmek ve hesap ele geçirmelerini (account takeover) durdurmak gibi koruyucu amaçlar için kullanılabileceği gibi, ziyaretçileri izinleri olmadan veya daha spesifik reklam hedeflemeleri için tanımlamak amacıyla da kullanılabilir.
User-Agent dizeleri bağlamında entropi, bireysel kullanıcıları izlemek ve ayırt etmek için kullanılabilecek benzersiz, tanımlanabilir bilgi miktarını ifade eder.
User-Agent dışında entropi kaynağı olarak kullanılabilecek birçok başka bilgi vardır. Örneğin, https://coveryourtracks.eff.org adresinde farklı entropi kaynakları bulabilirsiniz.
Bu nedenle, tarayıcılar User-Agent daraltmasından bahsettiklerinde, öncelikle yüksek entropili bilgileri azaltmayı hedeflerler. İşte daraltmaya dair farklı örnekler:
Aşağıda, bir Android telefonda Google'ın Chrome User-Agent daraltmasına bir örnek bulabilirsiniz:
Öncesi:
Mozilla/5.0 (Linux; Android <span style={{color: '#016F01' }}>13; Pixel 7</span>) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.0.0 Mobile Safari/537.36
Sonrası:
Mozilla/5.0 (Linux; Android <span style={{color: '#016F01' }}>10; K</span>) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.0.0 Mobile Safari/537.36
Kütüphanelerin mevcut ayrıştırma (parsing) mantığına müdahale etmemek için User-Agent'ın formatı değiştirilmeden kalmıştır. Aşağıdaki değerler azaltılmıştır:
Grafik, işletim sistemine göre hangi değerlerin güncellenmeye devam edeceğini ve yeşil değerler tüm platformlarda hangi değerlerin sabit kalacağını detaylandırmaktadır. Farklı işletim sistemi değerleri için yalnızca sabit kalan bir varyant mevcut olacaktır:
| İşletim sistemi | Daraltılmış/sabit isim |
|---|---|
| Mac | Macintosh; Intel Mac OS X 10_15_7 |
| Windows | Windows NT 10.0; Win64; x64 |
| ChromeOS | X11; CrOS x86_64 14541.0.0 |
| Linux | X11; Linux x86_64 |
| Android | Linux; Android 10; K |
| iOS | azaltıldı (iOS 26+) |
Aşağıda, User-Agent daraltması konusunda Google'ın konumlarının çoğunu takip eden Mozilla Firefox'un User-Agent daraltmasına bir örnek bulabilirsiniz.
İşte güncel bir Firefox sürümüne sahip Windows 11'deki bir User-Agent örneği:
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:127.0) Gecko/20100101 Firefox/127.0
Bu User-Agent'ta CPU Mimarisi, işletim sistemi sürümü ve tarayıcı ikincil sürümü dondurulmuştur.
Aşağıda, macOS üzerinde bir Safari User-Agent daraltması örneği bulabilirsiniz.
İlk olarak, Mac Silicon M2 üzerinde bir macOS Sonoma Sürüm 14.5'teki Safari User-Agent'ı ile başlayalım.
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Safari/605.1.15
macOS Sürümünün 10_15_07 ile sınırlandırıldığını ve mimarinin de Mac CPU mimarisini raporlamayarak Intel olarak sabitlendiğini görebilirsiniz. Bu durum macOS'teki Firefox ve Chrome için de geçerlidir.
iOS 26'dan (Eylül 2025'te yayınlandı) önce, iOS'teki Safari gerçek işletim sistemi sürümünü gösteriyordu. Ancak, Apple artık macOS'e benzer şekilde Safari 26'daki iOS/iPadOS User-Agent'ı dondurdu. Aşağıdaki örnek, iOS 26 öncesi bir User-Agent'ı göstermektedir:
Mozilla/5.0 (iPhone; CPU iPhone OS 17_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1
Not: iOS 26 itibariyle, iOS üzerindeki tüm tarayıcılar (Chrome, Firefox, Safari) artık macOS'e benzer şekilde dondurulmuş User-Agent dizelerine sahiptir. Aşağıdaki örnekler iOS 26 öncesi davranışı göstermektedir:
Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/126.0.6478.153 Mobile/15E148 Safari/604.1
Mozilla/5.0 (iPhone; CPU iPhone OS 17_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) FxiOS/127.1 Mobile/15E148 Safari/605.1.15
Genel olarak, User-Agent'ın özel olarak yüksek entropili bilgilerde azaltıldığı açıktır. Aşağıdaki genel bakış, User-Agent'ın hangi platform / işletim sistemi kombinasyonlarında daraltıldığını gösterir.
| Tarayıcı | Windows | MacOS | iOS | Android |
|---|---|---|---|---|
| Chrome | azaltıldı | azaltıldı | azaltıldı (iOS 26+) | azaltıldı |
| Edge | azaltıldı | azaltıldı | azaltıldı (iOS 26+) | azaltıldı |
| Firefox | azaltıldı | azaltıldı | azaltıldı (iOS 26+) | azaltıldı |
| Safari | - | azaltıldı* | azaltıldı (Safari 26+)** | - |
| Samsung Internet | - | - | - | azaltıldı |
| WebViews | - | - | azaltıldı (iOS 26+) | azaltılmadı (≥ 16: azaltıldı) |
Bu nedenle, azaltılmış bir User-Agent ile ilgili en önemli tespit sorunları şunlardır (* = macOS sürümü için aşağıdaki açıklamalara bakın):
Aşağıda, macOS sürümlerini karşılık gelen Safari sürümleriyle eşleştiren bir tablo bulunmaktadır:
| macOS Sürümü | Safari Sürümü | Çıkış Yılı |
|---|---|---|
| macOS Sequoia (15) | Safari 18 | 2024 |
| macOS Sonoma (14) | Safari 17 | 2023 |
| macOS Ventura (13) | Safari 16 | 2022 |
| macOS Monterey (12) | Safari 15 | 2021 |
| macOS Big Sur (11) | Safari 14 | 2020 |
| macOS Catalina (10.15) | Safari 13 | 2019 |
İşletim sistemlerini ve tarayıcıları tespit etmenin TLS parmak izi gibi ayrıntılı parmak izi tekniklerine dayanan başka yolları da vardır. Daha derin bir işletim sistemi tespitinin mantıklı olabileceği meşru senaryolar olduğundan Google, bu bilgileri programlı olarak alabilmek için Client Hints'i tanıttı. Client Hints'in nasıl çalıştığını bir sonraki bölümde göreceğiz.
Client Hints, web sitelerinin User-Agent dizesinden kaldırılan yüksek entropili bilgilere gizliliği koruyan bir şekilde erişmesini sağlar. Client Hints'e erişmenin iki temel yöntemi vardır:
Client hints, User-Agent'a zaten dahil edilmiş olan düşük entropili bilgileri almak için de kullanılabilir. Bu, Client hints'in desteklendiği Chrome'da artık user-agent'lara ihtiyaç duyulmadığı anlamına gelir.
Hangi erişim yönteminin kullanıldığına bağlı olarak, Client hints isimlendirmesi biraz farklılık gösterir. En önemli Client Hints isimlerini listeledik:
| HTTP UA-CH belirteci (token) | UA-CH JS API | Entropi |
|---|---|---|
| Sec-CH-UA-Platform-Version | UADataValues.platformVersion | Yüksek |
| Sec -CH-UA-Mobile | NavigatorUAData.mobile | Düşük |
| Sec-CH-UA-Model | UADataValues.model | Yüksek |
| Sec-CH-UA | NavigatorUAData.brands | Düşük |
| Sec-CH-UA-Arch | UADataValues. architecture | Yüksek |
Birinci taraf bir bağlamda, web siteleri HTTP istek başlıklarını kullanarak kullanıcının tarayıcısı ve cihazı hakkında spesifik bilgiler talep edebilir. Bu yaklaşım, sunucunun HTTP yanıtında doğru başlığı ayarlayarak sunucunun hangi Client Hints'iyle ilgilendiğini belirtmesini içerir. Tarayıcı daha sonra aynı kökene (origin) yapılan sonraki isteklere bu ipuçlarını dahil eder.
Bu başlık, tarayıcıya gelecekteki isteklerde ayrıntılı kullanıcı bilgilerini göndermesi için sinyal vererek sunucunun yanıtları buna göre uyarlamasına olanak tanır. Bu yöntem, ayrıntılı kullanıcı bilgilerine yalnızca birinci taraf web sitesi tarafından erişilebilmesini sağlayarak, üçüncü taraf (third-party) kaynakların yüksek entropili veriler elde etmesini önler. Şimdi tartışacağımız iki tür istek başlığı mevcuttur:
Normal Client Hints, bir sunucunun kullanıcının ortamı hakkında bilgi toplamak için tarayıcıdan sonraki isteklerde (subsequent requests) talep edebileceği başlıklardır.
Örnek: corbado.com üzerinde normal Client Hints ile macOS 14.5'te Chrome
| Başlık | Değer |
|---|---|
| Sec-Ch-Ua | "Google Chrome";v="125", "Chromium";v="125", "Not.A/Brand";v="24" |
| Sec-Ch-Ua-Mobile | ?0 |
| Sec-Ch-Ua-Platform | "macOS" |
| Başlık | Değer |
|---|---|
| Accept-CH | Sec-CH-UA-Platform-Version |
| Başlık | Değer |
|---|---|
| Sec-Ch-Ua | "Google Chrome";v="125", "Chromium";v="125", "Not.A/Brand";v="24" |
| Sec-Ch-Ua-Mobile | ?0 |
| Sec-Ch-Ua-Platform | "macOS" |
| Sec-Ch-Ua-Platform | "14.5.0" |
Aynı zamanda bu istek için User-Agent aynı kalacaktır (platform sürümü olmadan):
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
https://user-agent-client-hints.glitch.me/headers adresini kullanarak normal ipuçları için farklı bilgi düzenlerinin gerçekte nasıl görüneceği konusunda denemeler yapabilirsiniz (unutmayın, Chrome kullanmalısınız). Daha fazla ayrıntı için buraya bakabilirsiniz. Corbado.com'un bu bilgilere sayfanın ilk isteğinde (first request) ihtiyaç duyması durumunda, normal Client Hints kullanmak yeterli olmayacaktır, ancak bu süreci kritik (client) hints ile hızlandırmanın bir yolu vardır.
Diyelim ki corbado.com, tam macOS sürümüne göre uyarlanmış uygun bir indirme sayfasını işlemek (render etmek) için ilk istekte platform-sürümüne ihtiyaç duyuyor. Sayfayı yalnızca başlığı içerecek şekilde işlemek için isteğin derhal yeniden denenmesine (retry) yol açacak Kritik Client Hints'i kullanabilirdi:
Örnek: corbado.com üzerinde kritik Client Hints ile macOS 14.5'te Chrome
| Başlık | Değer |
|---|---|
| Sec-CH-UA | "Google Chrome";v="125", "Chromium";v="125", "Not_A/Brand";v="24" |
| Sec-CH-UA-Mobile | ?0 |
| Sec-CH-UA-Platform | "macOS" |
| Başlık | Değer |
|---|---|
| Accept-CH | Sec-CH-UA-Platform-Version |
| Başlık | Değer |
|---|---|
| Sec-CH-UA | "Google Chrome";v="125", "Chromium";v="125", "Not_A/Brand";v="24" |
| Sec-CH-UA-Mobile | ?0 |
| Sec-CH-UA-Platform | "macOS" |
| Sec-CH-UA-Platform-Version | "14.5.0" |
Aşağıdaki grafiklerde, web sitesinin cihaz modelini Critical-CH başlığı ile kritik bir parça olarak talep ettiği başka bir örnek görüyoruz. Görebileceğimiz gibi istemci, isteği yukarıdaki örnekte olduğu gibi yeniden dener (soldaki dizi/sequence şeması).
Chromium ile Client hints: https://developers.google.com/privacy-sandbox/protections/User-Agent
Kritik Client Hints'i kullanmak bu nedenle gecikme ekler çünkü tarayıcı hemen ikinci bir istek başlatarak gidiş-dönüş (roundtrip) eklemek zorundadır. Ayrıntıları önceden iletmek için TLS el sıkışmasını (handshake) (şemanın üst kısmındaki yeşil kutu) kolaylaştırarak aktarımı optimize etmenin bir yolu vardır. ALPN (Uygulama Katmanı Protokolü Müzakeresi) kolaylaştıran bu yaklaşım ayrıntılı olarak burada bulunabilir, ancak bu makalenin amacı dışındadır.
Başlıkları kullanarak ek bilgi almak için arka uca (backend) veya web sunucusuna / yük dengeleyicilere (load balancer) yapılandırma eklenmesi gerekir. Bu, şirket olarak web sitesi üzerinde tam kontrole sahip olduğunuz birinci taraf bir bağlamda kolayca yapılabilir. Örneğin, corbado.com'daki kullanıcı arayüzü (UI) bileşenlerimiz, geçiş anahtarı zekamızın (passkey intelligence) hassasiyetini artırmak için platform sürümüne ihtiyaç duyar. Geliştiriciler bileşenlerimizi çeşitli sayfalara entegre ederler ve onlardan başlıklar (headers) eklemelerini isteyip ardından bu bilgileri bileşenlerimize aktarmalarını talep etmek istenmeyen bir ek yük (overhead) olacaktır. SPA'lar ve diğer gömülü JavaScript uygulamaları için kullanılabilecek, bir sonraki bölümde açıklanacak başka bir arayüz bulunmaktadır.
navigator.userAgentData.getHighEntropyValues() işlevini kullanarak, Client hints'e bir JavaScript API'si aracılığıyla da erişilebilir, bu da kullanıcının tarayıcısı ve cihazı hakkında belirli bilgileri talep etmenin esnek ve dinamik bir yolunu sunar. Bu yöntem, Client Hints'i sorgulamak için web sayfasının komut dosyası içindeki navigator.userAgentData nesnesini kullanmayı içerir. Bu yöntem Client Hint başlıklarının ayarlanmasını gerektirmez, ancak yalnızca navigator.userAgentData'yı destekleyen tarayıcılarda (Chrome ve Edge gibi Chromium tabanlı tarayıcılar) çalışır. Firefox ve Safari bu API'yi desteklemez, bu nedenle geliştiriciler özellik tespiti (feature-detect) yapmalı ve geri dönüşler (fallbacks) sağlamalıdır.
Örneğin, bu kodu macOS'teki bir Chrome Konsolunda çalıştırırken:
if (navigator.userAgentData) { navigator.userAgentData .getHighEntropyValues(["architecture", "model", "platformVersion"]) .then((ua) => { console.log(ua); }); }
Söz (promise) çözümlendiğinde (resolves) ilgili bilgiler döndürülür. Yukarıda belirttiğimiz gibi, isimler başlıklarla tamamen aynı değildir, ancak çok yakındır.
Daha sonra platformVersion söz içerisinde döndürülür ve gömülü JavaScript kodundan doğrudan erişilebilir. Bu işlevin kapsamı, fiili User-Agent daraltma düzeyinden çok daha düşüktür:
Ayrıca Chrome, Apple'ın kısıtlamaları nedeniyle iOS üzerinde WebKit dağıttığı için iOS'te bu işlevselliği sunmamaktadır.
Şimdi User-Agent daraltması ve Client hints'in Chrome'da bunu aşmak için nasıl bir yol sunduğu hakkındaki en önemli gerçekleri bir araya getirdik.
Kullanım senaryonuza bağlı olarak, uygulamanızın mümkün olan en iyi sonucu almasını sağlamak için farklı bir yaklaşım kullanmalısınız:
Aşağıdaki tablo, User-Agent (UA) ve Client Hints (CH) erişiminiz varsa işletim sistemi sürümünü hala tespit edebileceğiniz durumları özetlemektedir:
| Tarayıcı | Windows | MacOS | iOS | Android |
|---|---|---|---|---|
| Chrome | ✅ CH | ✅ CH | ❌ (iOS 26+) | ✅ CH |
| Edge | ✅ CH | ✅ CH | ❌ (iOS 26+) | ✅ CH |
| Firefox | ❌ | ❌ | ❌ (iOS 26+) | ❌ |
| Safari | - | ✅ UA-Safari | ❌ (Safari 26+) | - |
| Samsung Internet | - | - | - | ✅ CH |
| WebViews | - | - | ❌ (iOS 26+) | ✅ UA (≥ 16: ❌) |
Özel ihtiyaçlarınıza göre uygun yöntemi seçerek, ayrıntılı kullanıcı bilgilerine duyulan ihtiyaç ile gizlilik ve performans hususlarını etkili bir şekilde dengeleyebilirsiniz. Çıkarılması zor olan veya gerçekten cihaza dayalı bilgilere çok fazla bağımlıysanız, ağır yükü sizin yerinize halleden wurfl veya 51degrees.com gibi profesyonel kütüphanelere başvurun. Her iki kütüphane de istemci bağlantılarını (client links) tespite entegre etmeyi destekler ve hatta iPhone modellerini tespit etmek için kendi tescilli yöntemleri vardır.
Corbado'da öncelikle React ile geliştirilen UI bileşenlerini kullanarak geçiş anahtarları (passkeys) etrafında çözümler geliştirmeye odaklanıyoruz. Bileşenlerimiz çeşitli web sitelerine gömülüdür, bu nedenle kendi tavsiyemize uyarız ve mevcut olduğu her yerde getHighEntropyValues()'u kullanırız, diğer tüm durumlar için klasik User-Agent ayrıştırmasına döneriz. Bunu öncelikle şunlar için kullanırız:
Daha fazla detay için: https://learn.microsoft.com/en-us/microsoft-edge/web-platform/how-to-detect-win11
Bileşenlerimiz için bilgi derlemeye başladığımızda, User-Agent daraltmasının başlangıcında veya öncesinde oluşturulmuş çok sayıda parçalanmış veri bulduk. Bu nedenle, User-Agent'lar veya Client Hints ile düzenli olarak çalışmayan ancak tespiti geliştirmek isteyen geliştiriciler için bir özetin faydalı olacağını düşündük.
User-Agent tabanlı tespitin onlarca yıl standart olmasının ardından, kullanıcı gizliliğini korumak amacıyla User-Agent dizeleri daha az ayrıntılı hale gelmiştir. Bu makalede ele aldıklarımız:
Client hints evrimleşmeye devam etmektedir ve daha fazla tarayıcı ve geliştirici faydalarını fark ettikçe benimsenmesi artabilir. Ancak desteklerinin yaygınlaşıp yaygınlaşmayacağı veya web'in bu konuda ayrışmaya devam edip etmeyeceği henüz belli değildir.
Corbado, büyük ölçekte tüketici kimlik doğrulaması yöneten CIAM ekipleri için Authentication Intelligence Platform'tur. IDP loglarının ve genel analytics araçlarının göremediğini görmenizi sağlarız: hangi cihazların, OS sürümlerinin, tarayıcıların ve credential manager'ların passkey desteklediğini; kayıtların neden girişe dönüşmediğini; WebAuthn akışının nerede başarısız olduğunu; bir OS ya da tarayıcı güncellemesinin girişi sessizce ne zaman bozduğunu — hem de Okta, Auth0, Ping, Cognito veya kendi IDP'nizi değiştirmeden. İki ürün: Corbado Observe, passkey'ler ve diğer tüm giriş yöntemleri için observability sağlar. Corbado Connect, analytics entegre managed passkey'ler sunar (IDP'nizin yanında). VicRoads, Corbado ile 5M+ kullanıcı için passkey çalıştırıyor (%80+ passkey aktivasyonu). Bir Passkey uzmanıyla görüşün →
Apple, Eylül 2025'te yayınlanan Safari 26'da iOS/iPadOS User-Agent dizesini dondurdu, bu da işletim sistemi sürümünün artık iOS üzerinde çalışan hiçbir tarayıcıda User-Agent aracılığıyla açığa çıkmadığı anlamına geliyor. Android veya masaüstündeki Chrome'un aksine, iOS tarayıcılarında Client Hints API'si bulunmadığından gerçek iOS sürümüne artık programatik olarak erişilememektedir.
Accept-CH yanıt başlığı aracılığıyla talep edilen normal Client Hints, yalnızca sonraki isteklere dahil edilir ve ilk sayfa yüklemesinde kullanılamaz. Kritik Client Hints, tarama öncesinde anında bir tarayıcı yeniden denemesini tetikleyerek ipucunun ilk işlemede (render) kullanılabilir olmasını sağlar, ancak bu durum istek döngüsüne ek bir gidiş-dönüş gecikmesi ekler.
Apple, 2017 yılında Safari Technology Preview 46'da User-Agent dondurmasını duyurdu, ancak güncel User-Agent bilgilerine dayanan web siteleriyle yaşanan önemli uyumluluk sorunları nedeniyle 2021'de bu kararı kısmen geri aldı. Apple daha sonra o dönemde anında tam bir dondurma yerine daha kademeli bir dondurulmuş UA yaklaşımı uyguladı.
Safari Client Hints'i desteklemez, ancak macOS sürümü User-Agent dizesindeki Safari sürüm numarasından çıkarılabilir. Safari ve macOS sürümleri arasındaki tutarlı sürüm uyumu temel alındığında, Safari ana sürümünden üç çıkarmak, macOS 10.15 ve üzeri için macOS ana sürümüyle güvenilir bir şekilde eşleşir.
Önerilen yaklaşım, Chromium tabanlı tarayıcıları kapsayacak şekilde işlev tanımlandığında navigator.userAgentData.getHighEntropyValues() çağrısı yapmak ve Firefox ile Safari için User-Agent dizisi ayrıştırma kütüphanelerine geri dönmektir. Son derece spesifik cihaz modeli tanımlaması gerektiren durumlarda, wurfl veya 51degrees gibi profesyonel kütüphaneler, User-Agent dizelerinin sunduğundan daha fazla tespit yeteneği sağlar.
İlgili makaleler
İçindekiler