Tarayıcının sunuculara kendini nasıl tanıttığını gör: user agent dizen, Client Hints değerlerin, ekranın, dilin, saat dilimin. İstediğin user agent dizesini yapıştırıp tarayıcı, motor, işletim sistemi ve cihaz türüne ayır. Her şey tarayıcında çözümlenir, hiçbir veri gönderilmez.
Hazır örnekler
Tarayıcının user agent dizesinden bağımsız olarak bildirdiği yapılandırılmış değerler. Dize donduruldukça asıl kaynak burası oluyor.
Bu değerler user agent dizesinden değil, çalışan tarayıcıdan okunur. Bir sitenin sana ne gösterebileceğini belirleyen asıl bilgiler bunlardır.
Bu sayfa hiçbir şey göndermez: çözümleme, Client Hints okuması ve ortam bilgileri tamamen tarayıcında çalışır. Yapıştırdığın dize sunucuya gitmez, kaydedilmez.
Sayfayı açtığın anda tarayıcının sunuculara gönderdiği user agent dizesi en üstte yazar ve tek tıkla kopyalanır. Aynı anda tarayıcı, motor, işletim sistemi ve cihaz türü çözümlenir.
Kutuya merak ettiğin user agent dizesini yapıştır ya da hazır örneklerden birine tıkla. Sonuç sen yazarken güncellenir; yapıştırdığın dize hiçbir yere gönderilmez.
Chromium tabanlı tarayıcılarda navigator.userAgentData da okunur. Windows 10 ile Windows 11 ayrımı ve tam tarayıcı sürümü gibi klasik dizenin artık vermediği bilgiler burada çıkar.
Ekran çözünürlüğü, görünüm alanı, piksel oranı, diller, saat dilimi, çekirdek sayısı, dokunma noktası ve güvenli bağlam aynı sayfada listelenir. Hepsi tarayıcıdan okunur.
User agent, tarayıcının her HTTP isteğiyle birlikte gönderdiği bir başlıktır: User-Agent. İçinde tarayıcının adı, sürümü, çalıştığı işletim sistemi ve kimi zaman cihaz modeli yazar. Sunucu bu tek satıra bakarak karşısındakinin ne olduğunu tahmin eder; mobil sayfa mı göndereceğine, hangi indirme bağlantısını önereceğine, isteğin bir bot mu olduğuna çoğunlukla buradan karar verir.
Ama user agent bir kimlik belgesi değil, bir beyandır. Tarayıcı ne yazarsa o gider; istemci tarafında tek satırlık bir ayarla ya da bir eklentiyle değiştirilebilir, curl ile istediğin şey yazılabilir. Bu yüzden güvenlik kararları user agent üzerine kurulmaz. Bir dizeyi çözümlemek, karşı tarafın ne olduğunu değil, ne olduğunu iddia ettiğini söyler.
Türkçede kimi yerde kullanıcı aracısı diye geçse de sektörde herkes user agent der; kaynaklarda, tarayıcı geliştirici araçlarında ve HTTP belirtiminde geçen ad budur.
Çünkü otuz yıllık bir taklit zinciri var. 1993’te Mosaic vardı; ertesi yıl çıkan Netscape kendine kod adı olarak Mozilla dedi ve dizesine Mozilla/1.0 yazdı. Netscape çerçeveleri destekleyen ilk tarayıcı olunca siteler dizede Mozilla arayıp çerçeveli sayfayı yalnızca ona göndermeye başladı.
Internet Explorer aynı sayfaları alabilmek için kendini Mozilla/4.0 (compatible; MSIE 4.0) diye tanıttı: yani Mozilla gibiyim, ama aslında IE’yim. Sonra Safari geldi ve KHTML motorundan türediği için like Gecko yazdı, üstelik Mozilla ile de başladı. Chrome hem KHTML’i hem Safari’yi hem Mozilla’yı yazdı. Edge, Chromium’a geçtiğinde dizesine Chrome, Safari ve Mozilla’yı birden koydu ve sonuna Edg ekledi.
Bugün Mozilla/5.0 ile başlamayan neredeyse hiçbir tarayıcı yok ve bu ifade hiçbir şey anlatmıyor. Aynı şekilde like Gecko de, çoğu dizedeki AppleWebKit sürüm numarası da tarihsel kalıntıdır. Bir dizeyi doğru okumak, tam olarak bu yalanların hangisinin ne anlama geldiğini bilmektir.
Aşağıdaki dize Windows üzerinde çalışan bir Chrome’a ait. Altı parçadan yalnızca ikisi gerçekten bilgi taşıyor.
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.0.0 Safari/537.36
| Parça | Ne anlatır? |
|---|---|
Mozilla/5.0 |
Hiçbir şey. Netscape uyumluluğu için taşınan tarihsel bir kalıntı; bugün neredeyse bütün tarayıcılarda var. |
(Windows NT 10.0; Win64; x64) |
Platform bölümü. Windows çekirdek sürümü ve mimari. NT 10.0 hem Windows 10 hem Windows 11 demektir; bu ikisi dizeden ayrılamaz. |
AppleWebKit/537.36 |
WebKit sürümü. Chrome 2013’te Blink’e geçtiğinden beri bu numara sabit; artık gerçek bir sürüm değil. |
(KHTML, like Gecko) |
Yine kalıntı. WebKit’in atası KHTML’e ve Firefox’un motoru Gecko’ya yapılan uyumluluk beyanı. |
Chrome/153.0.0.0 |
Asıl bilgi. Tarayıcının adı ve sürümü. Küçük haneler artık sıfırlanıyor: gerçek sürüm 120.0.6099.129 olabilir. |
Safari/537.36 |
Safari’ye göre yazılmış siteler bozulmasın diye eklenen uyumluluk beyanı. Tarayıcının Safari olduğu anlamına gelmez. |
Bir user agent çözümleyicisinin doğru sonuç verip vermediği, aşağıdaki parçaları hangi sırayla aradığına bağlıdır. Bu sayfadaki çözümleyici en özel eşleşmeden en genele doğru ilerler; Edge’i Chrome, Opera’yı Chrome, Chrome’u Safari sanmamasının tek sebebi budur.
| Parça | Anlamı | Tuzağı |
|---|---|---|
Edg/ |
Microsoft Edge (Chromium) | Aynı dizede Chrome ve Safari de yazar. Önce Chrome aranırsa Edge kaybolur. |
EdgA/ EdgiOS/ |
Android ve iOS üzerindeki Edge | iOS sürümünde motor Blink değil WebKit’tir. |
OPR/ |
Opera (Chromium) | Dizede Chrome yazar. Eski Opera ise Opera/9.80 diye başlar ve gerçek sürümü Version parçasında taşır. |
CriOS/ FxiOS/ |
iOS üzerindeki Chrome ve Firefox | Apple kuralı gereği ikisi de WebKit ile çalışır; motoru Blink ya da Gecko sanmak yanlıştır. |
SamsungBrowser/ |
Samsung Internet | Chrome sürümünü de taşır ve o sürüm tarayıcının kendi sürümünden geridedir. |
; wv) |
Android WebView | Bağımsız bir tarayıcı değil, bir uygulamanın içine gömülü görünüm. Chrome ile karıştırılır. |
Version/26.5 Safari/605.1.15 |
Safari | Safari’nin sürümü Version parçasındadır; Safari parçasındaki numara yapı numarasıdır. |
Macintosh; Intel Mac OS X 10_15_7 |
macOS | Sürüm dondurulmuş, Apple Silicon da Intel diye yazıyor ve masaüstü modundaki iPad de aynı dizeyi gönderiyor. |
Android 10; K |
Android | İndirgenmiş dize. Chrome artık gerçek Android sürümünü ve cihaz modelini yazmıyor. |
Trident/ |
Internet Explorer | IE 11 dizesinde MSIE ifadesi geçmez; sürüm rv parçasındadır. |
User agent dizesi, ayrıntısı yüzünden parmak izi çıkarmaya elverişli hâle geldi: işletim sistemi yaması, cihaz modeli ve tam sürüm birleştiğinde bir tarayıcıyı kalabalıkta tek başına ayırt etmeye yetiyordu. Chromium bu yüzden dizeyi dondurmaya başladı ve yerine User Agent Client Hints adında yapılandırılmış bir mekanizma getirdi.
Mantık şu: az bilgi taşıyan alanlar kendiliğinden gönderilir, çok bilgi taşıyanlar ise ancak sunucu açıkça isterse. Tarayıcı her istekte Sec-CH-UA, Sec-CH-UA-Mobile ve Sec-CH-UA-Platform başlıklarını yollar. Cihaz modeli, tam sürüm, mimari ve platform sürümü gibi değerler için sunucunun Accept-CH başlığıyla bunları talep etmesi gerekir. Aynı değerlere JavaScript tarafından navigator.userAgentData ile ulaşılır; yüksek entropili olanlar için getHighEntropyValues çağrısı yapılır ve sonuç bir söz olarak döner.
Bunun pratikteki sonucu, bu sayfanın üst kısmında görünür: Windows 10 ile Windows 11 klasik dizeden ayırt edilemez, Client Hints platform sürümünden ayırt edilir. Aynı şekilde Chrome’un tam sürümü artık yalnızca hints tarafındadır. Firefox ve Safari bu API’yi uygulamadı; o tarayıcılarda geriye yine klasik dize kalıyor.
| Soru | Klasik dize | Client Hints |
|---|---|---|
| Windows 10 mu, 11 mi? | Ayırt edemez | Platform sürümü 13 ve üzeriyse Windows 11 |
| Tam tarayıcı sürümü | Yalnızca ana sürüm | Dört haneli tam sürüm |
| İşlemci mimarisi | Çoğu zaman yanıltıcı | Mimari ve bit genişliği ayrı ayrı |
| Cihaz modeli | Android tarafında artık gizli | İstenirse bildirilir |
| Firefox ve Safari desteği | Var | Yok |
Sayfa açılır açılmaz kendi user agent dizen, Client Hints değerlerin ve tarayıcı ortamın yazılı gelir. Tek tıkla kopyalarsın.
Edge’i Chrome, Opera’yı Chrome, iOS Chrome’unu Blink sanmaz. Kurallar en özelden en genele sıralıdır ve gerçek dizelerle ölçülmüştür.
Windows 10 ile 11, macOS ile masaüstü modundaki iPad ayrılamadığında bunu uydurmak yerine yazar.
Googlebot, Bingbot, yapay zekâ tarayıcıları, curl, Wget ve HTTP kütüphaneleri tarayıcı gibi gösterilmez; ayrı bir istemci türü olarak işaretlenir.
Ekran, görünüm alanı, piksel oranı, dil, saat dilimi, çekirdek sayısı, bellek, dokunma noktası ve güvenli bağlam tek listede.
Sunucuya istek yok, üçüncü tarafa çağrı yok. Yapıştırdığın dize de okunan değerler de tarayıcından çıkmaz.
User agent, tarayıcının her HTTP isteğiyle birlikte gönderdiği User-Agent başlığıdır. İçinde tarayıcının adı ve sürümü, çalıştığı işletim sistemi ve kimi zaman cihaz modeli yazar. Sunucular bu tek satıra bakarak mobil sayfa gönderip göndermeyeceklerine, hangi indirme bağlantısını önereceklerine ya da isteğin bir bot olup olmadığına karar verir. Ancak bu bir kimlik belgesi değil, bir beyandır: tarayıcı ne yazarsa o gider ve kolayca değiştirilebilir.
Bu sayfayı açman yeterli: kendi user agent dizen en üstte yazar ve tek tıkla kopyalanır. Hemen altında dizeden çıkarılan tarayıcı, motor, işletim sistemi ve cihaz türü ile birlikte ekran çözünürlüğün, görünüm alanın, dillerin ve saat dilimin gibi tarayıcı bilgilerin listelenir. Bu değerler sunucudan değil, çalışan tarayıcından okunur.
Otuz yıllık bir uyumluluk zinciri yüzünden. Netscape kendine Mozilla dedi, siteler dizede Mozilla aramaya başladı; Internet Explorer aynı sayfaları alabilmek için kendini Mozilla/4.0 (compatible; MSIE 4.0) diye tanıttı. Safari KHTML’den türediği için like Gecko yazdı, Chrome hem Safari hem Mozilla yazdı, Edge de Chromium’a geçince üçünü birden yazıp sonuna Edg ekledi. Bugün Mozilla/5.0 ile like Gecko hiçbir şey anlatmaz.
Değiştirilebilir ve bu yüzden güvenilmez. Tarayıcının geliştirici araçlarından tek satırlık bir ayarla, bir eklentiyle ya da curl -A ile istediğin dizeyi gönderebilirsin. Bu yüzden erişim denetimi, lisans kontrolü ya da güvenlikle ilgili hiçbir karar user agent üzerine kurulmamalıdır. Özellik desteği için doğru yöntem, dizeyi okumak değil, özelliğin kendisini sınamaktır.
Evet, yavaş yavaş. Dizenin ayrıntısı parmak izi çıkarmaya elverişli olduğu için Chromium dizeyi dondurdu: küçük sürüm haneleri sıfırlandı, Android sürümü ve cihaz modeli indirgendi. Yerine Sec-CH-UA ailesi geldi; az bilgi taşıyan alanlar kendiliğinden, cihaz modeli ve tam sürüm gibi alanlar ise sunucu Accept-CH ile isterse gönderiliyor. JavaScript tarafında karşılığı navigator.userAgentData. Firefox ve Safari bu API’yi uygulamadı.
Hayır. Bu sayfada sunucuya giden hiçbir istek yok: çözümleme de, Client Hints okuması da, ekran ve saat dilimi gibi ortam bilgileri de tamamen tarayıcında çalışır. Üçüncü taraf bir servise çağrı yapılmaz, hiçbir değer kaydedilmez. Sekmeyi kapattığında geriye iz kalmaz.