Halaman ini diterjemahkan secara otomatis. Baca versi asli berbahasa Inggris di sini.

Cheatsheet Passkeys. Panduan praktis, pola peluncuran, dan KPI untuk program passkeys.
navigator.userAgentData, mengharuskan
developer untuk kembali menggunakan penguraian string User-Agent klasik di browser Mozilla.getHighEntropyValues() mengakses data perangkat entropi tinggi hanya
di browser berbasis Chromium. Safari dan Firefox sama sekali tidak memiliki API ini.Metode untuk mendeteksi dan merespons lingkungan pengguna yang berbeda terus berubah. Secara tradisional, string User-Agent telah menjadi cara untuk mengidentifikasi informasi browser dan perangkat, memungkinkan situs web untuk menyesuaikan pengalaman dengan tepat. Namun, string ini sering digunakan untuk fingerprinting dan mengidentifikasi pengguna tanpa persetujuan mereka karena alasan pemasaran yang menimbulkan masalah privasi.
Dalam konteks ini, Client Hints sebagai API JavaScript telah muncul sebagai alat, memberikan cara yang lebih terkontrol dan menghargai privasi untuk membagikan informasi yang diperlukan tentang perangkat dan preferensi pengguna. Artikel ini berkonsentrasi pada konsekuensi pengurangan User-Agent dan mengeksplorasi bagaimana Client Hints membantu beradaptasi dengan situasi baru ini.
Poin penting yang akan kita bahas:
Karena browser dan sistem operasi memiliki pendirian yang berbeda dan mengadaptasi pendekatan mereka secara berbeda, pengembang perangkat lunak menghadapi tantangan untuk memastikan aplikasi mereka masih dapat mendeteksi dan merespons lingkungan pengguna yang bervariasi secara akurat di seluruh browser dan sistem operasi.
Artikel ini bertujuan untuk memberikan ikhtisar komprehensif tentang perubahan ini, menawarkan wawasan dan panduan praktis untuk membantu developer jika use case atau perangkat lunak mereka bergantung pada detail perangkat atau sistem operasi (misalnya, manajemen perangkat terperinci, mendeteksi perangkat yang dikenal, pencegahan penipuan, atau deteksi fitur lainnya) atau seperti dalam kasus kita sendiri mengoptimalkan pengalaman kunci sandi dengan User-Agent dan Client Hints.
Artikel terbaru
Sebelum kita menyelami detail teknis tentang Client Hints, kita akan mengeksplorasi secara singkat sejarah User-Agent dan bagaimana berbagai upaya pengurangan User-Agent bekerja.
Sejarah string User-Agent dapat ditelusuri kembali ke awal mula web browser. Tim Berners-Lee mengembangkan browser web pertama, WorldWideWeb (kemudian berganti nama Nexus) pada tahun 1990. Ini segera diikuti oleh browser perintis lainnya seperti Line Mode Browser pada tahun 1991, dan selanjutnya, browser seperti MidasWWW, ViolaWWW, Erwise, dan Cello bermunculan.
Pada tahun 1993, rilisnya NCSA Mosaic, yang sering
disebut sebagai Mosaic saja, dikreditkan dengan memicu lonjakan awal popularitas web. String User-Agent Mosaic
cukup lugas, biasanya diformat sebagai
NCSA_Mosaic/1.0 yang menampilkan nama produk diikuti dengan garis miring dan nomor versi opsional.
Awalnya, bidang User-Agent diperkenalkan untuk tujuan analitis dan untuk membantu mengidentifikasi masalah. Bidang ini secara eksplisit direkomendasikan "harus disertakan" dalam permintaan HTTP, sebagaimana dicatat dalam arsip HTTP W3C dari tahun 1992. Bidang yang lugas ini memberikan cara yang sederhana namun efektif untuk menyampaikan nama dan versi produk, membantu dalam pemahaman dan pemecahan masalah terkait browser.
Seiring berkembangnya web, begitu pula kompleksitas dan penggunaan string User-Agent. String tersebut menjadi lebih rinci dan mulai menyertakan banyak informasi tentang browser, sistem operasi, dan perangkat. Meskipun informasi ini berharga untuk analitik web dan mengoptimalkan pengalaman pengguna, informasi ini juga menimbulkan masalah privasi yang signifikan. String User-Agent yang mendetail memungkinkan device fingerprinting, sehingga pengiklan dan pelacak dapat membuat profil pengguna yang unik dan melacak aktivitas online mereka di berbagai situs web.
Di era modern, di mana privasi telah menjadi perhatian penting bagi pengguna dan pembuat peraturan, sifat detail dari string User-Agent semakin dipandang sebagai masalah. Kesadaran ini telah mengarah pada upaya untuk mengurangi perincian string User-Agent, yang bertujuan untuk menyeimbangkan antara menyediakan informasi yang diperlukan untuk fungsionalitas web dan melindungi privasi pengguna. Transisi ini menandai awal dari pengurangan User-Agent, sebuah gerakan menuju minimalisasi informasi yang dibagikan dalam string User-Agent untuk memitigasi risiko privasi dan meningkatkan keamanan.
Gerakan menuju pengurangan User-Agent dimulai sebagai respons terhadap masalah privasi yang berkembang. Berikut adalah gambaran kronologis tonggak sejarah utama dalam evolusi ini:
Pada tahun 2017, Apple memulai gerakan pengurangan User-Agent dengan sebuah postingan Twitter yang terkenal mengumumkan bahwa Safari akan membekukan string User-Agent di Safari Technology Preview 46 (STP 46), yang bertujuan untuk memerangi fingerprinting dan meningkatkan privasi.
Namun, keputusan ini kemudian dibalik sebagian pada tahun 2021 karena signifikan masalah kompatibilitas dengan situs web yang mengandalkan informasi User-Agent yang mutakhir.
Pada 2019/2020, Google mengumumkan rencana untuk mengurangi rincian string User-Agent di Chrome, dengan memperkenalkan User-Agent Client Hints (UA-CH) sebagai cara yang fleksibel dan terkendali untuk meminta informasi browser dan perangkat tertentu. Google mulai menguji pengurangan User-Agent di versi Chrome Canary dan Beta, mengumpulkan masukan untuk memastikan kompatibilitas dan fungsionalitas dan selesai pada tahun 2023 untuk Android dan semua platform Chrome lainnya. Pada saat yang sama, Chrome memperkenalkan Client Hints sebagai cara baru untuk mengakses informasi tersebut. Karena Microsoft Edge didasarkan pada Chromium, Microsoft Edge berperilaku seperti Chrome di semua platform.
Pada tahun 2021, Mozilla bergabung dengan upaya tersebut, secara bertahap mengurangi rincian string User-Agent tetapi Mozilla memutuskan untuk tidak mendukung Client Hints di Firefox.
Pengurangan User-Agent bervariasi berdasarkan browser: Chromium (Chrome, Edge) telah mengimplementasikan pengurangan UA penuh dengan dukungan Client Hints. Namun, Safari menggunakan pendekatan UA bekunya sendiri
tanpa mengadopsi UA-CH, dan Firefox belum mengimplementasikan navigator.userAgentData. Ekosistem
tetap terfragmentasi.
Client Hints telah berkembang di dalam Chromium: Semua browser masih mengirim header User-Agent, tetapi di sebagian besar browser, header tersebut dibekukan ke versi yang lebih lama (lihat tabel di bawah). Untuk Chromium, Client Hints dapat digunakan untuk mendapatkan informasi lebih lanjut.
Mari kita lihat apa yang saat ini dikirim browser sebagai User-Agent pada bab berikut.
Berlangganan Passkeys Substack kami untuk berita terbaru.
Saat berbicara tentang Pengurangan User-Agent, yang dimaksud adalah mengurangi informasi di dalam string User-Agent. Mari kita gali lebih dalam untuk mengetahui apa yang disematkan ke dalam User-Agent sebelum pengurangan.
String User-Agent klasik biasanya mencakup komponen berikut, yang dapat digunakan untuk mendeteksi fungsionalitas:
Mozilla/5.0 (Linux; Android 13; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.2.1.0 Mobile Safari/537.36
Secara historis, string User-Agent sering digunakan untuk deteksi fitur dan platform, memungkinkan situs web untuk menyesuaikan konten dan fungsionalitasnya berdasarkan karakteristik browser dan perangkat yang terdeteksi (misalnya, menentukan unduhan untuk biner tertentu yang akan ditawarkan). Hal ini menjadi sangat penting dengan munculnya ponsel dan tablet untuk tata letak yang tidak dibuat responsif untuk dapat mengarahkan ponsel ke versi spesifik mereka.
Namun, pendekatan ini sekarang dianggap suboptimal, karena mengandalkan asumsi tentang kemampuan browser yang mungkin tidak berlaku atau tidak cukup spesifik. Praktik pengembangan web modern menyarankan penggunaan deteksi fitur melalui API browser jika memungkinkan untuk langsung memeriksa fitur dan kemampuan browser tertentu. Metode ini lebih dapat diandalkan dan memastikan bahwa situs web berfungsi dengan benar terlepas dari string User-Agent atau versi browser. Deteksi fitur berfokus pada kemampuan aktual browser, memberikan cara yang lebih kuat dan tahan masa depan untuk menangani perbedaan perilaku dan fungsionalitas browser.
Hingga saat ini, hal ini belum sepenuhnya memungkinkan karena API browser baru untuk mendeteksi fungsionalitas diimplementasikan pada waktu yang berbeda dan seringkali ada pendekatan yang berbeda antara tim browser yang lebih besar (misalnya browser berbasis Chromium) dan tim browser yang lebih kecil (misalnya Firefox).
Lebih banyak informasi memberi situs web kemungkinan yang lebih luas untuk membuat fingerprint dengan lebih banyak "entropi". Entropi dalam konteks ini adalah jumlah variasi yang dapat digunakan untuk menghasilkan fingerprint yang unik di antara pengunjung yang berbeda dari sebuah situs web.
Sebuah fingerprint dapat digunakan untuk berbagai tujuan. Dapat digunakan untuk tujuan perlindungan seperti mendeteksi penipuan dan menghentikan pengambilalihan akun dengan mengidentifikasi perangkat baru, tetapi juga dapat digunakan untuk mengidentifikasi pengunjung tanpa persetujuan mereka atau untuk penargetan iklan yang lebih spesifik.
Dalam konteks string User-Agent, entropi mengacu pada jumlah informasi unik yang dapat diidentifikasi yang dapat digunakan untuk melacak dan membedakan pengguna individu.
Ada banyak informasi lebih lanjut yang dapat digunakan sebagai sumber entropi di bawah User-Agent. Misalnya, Anda dapat menemukan berbagai sumber entropi di https://coveryourtracks.eff.org.
Oleh karena itu, ketika browser berbicara tentang pengurangan User-Agent, mereka terutama menargetkan untuk mengurangi informasi entropi tinggi. Berikut adalah contoh berbeda untuk pengurangan tersebut:
Berikut ini, Anda akan menemukan contoh untuk pengurangan User-Agent Chrome dari Google di ponsel Android:
Sebelumnya:
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
Setelah:
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
Format User-Agent tetap tidak berubah agar tidak mengganggu logika penguraian library yang ada. Nilai-nilai berikut dikurangi:
Grafik ini merinci nilai-nilai mana yang akan terus diperbarui berdasarkan sistem operasi dan nilai hijau menunjukkan nilai mana yang akan konstan di semua platform. Untuk nilai sistem operasi yang berbeda hanya akan ada varian yang tersedia yang tetap konstan:
| Sistem operasi | Nama dikurangi/tetap |
|---|---|
| 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 | dikurangi (iOS 26+) |
Berikut ini, Anda akan menemukan contoh untuk pengurangan User-Agent Mozilla Firefox yang mengikuti sebagian besar posisi Google tentang pengurangan User-Agent.
Berikut adalah contoh User-Agent pada Windows 11 dengan versi Firefox saat ini:
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:127.0) Gecko/20100101 Firefox/127.0
Pada User-Agent ini, Arsitektur CPU, versi sistem operasi, dan versi minor browser telah dibekukan.
Berikut ini, Anda akan menemukan contoh pengurangan User-Agent Safari di macOS.
Pertama, mari kita mulai dengan User-Agent Safari pada macOS Sonoma Versi 14.5 di Mac Silicon M2.
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
Anda dapat melihat bahwa Versi macOS dibatasi pada 10_15_07 dan arsitekturnya juga
tetap ke Intel tidak melaporkan arsitektur CPU Mac. Ini juga berlaku untuk Firefox dan
Chrome di macOS.
Sebelum iOS 26 (dirilis September 2025), Safari di iOS mengungkap versi sistem operasi yang sebenarnya. Namun, Apple kini telah membekukan User-Agent iOS/iPadOS di Safari 26, mirip dengan macOS. Contoh di bawah menunjukkan User-Agent pra-iOS 26:
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
Catatan: Mulai iOS 26, semua browser di iOS (Chrome, Firefox, Safari) sekarang memiliki string User-Agent yang dibekukan, mirip dengan macOS. Contoh di bawah menunjukkan perilaku pra-iOS 26:
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
Secara keseluruhan, jelas bahwa User-Agent dikurangi secara khusus pada informasi entropi tinggi. Ringkasan berikut menunjukkan pada platform / kombinasi sistem operasi mana User-Agent dikurangi.
| Browser | Windows | MacOS | iOS | Android |
|---|---|---|---|---|
| Chrome | dikurangi | dikurangi | dikurangi (iOS 26+) | dikurangi |
| Edge | dikurangi | dikurangi | dikurangi (iOS 26+) | dikurangi |
| Firefox | dikurangi | dikurangi | dikurangi (iOS 26+) | dikurangi |
| Safari | - | dikurangi* | dikurangi (Safari 26+)** | - |
| Samsung Internet | - | - | - | dikurangi |
| WebViews | - | - | dikurangi (iOS 26+) | tidak dikurangi (≥ 16: dikurangi) |
Oleh karena itu, masalah deteksi paling penting dengan User-Agent yang dikurangi adalah (* = lihat keterangan di bawah untuk versi macOS):
Berikut adalah tabel yang memetakan versi macOS ke versi Safari yang sesuai:
| Versi macOS | Versi Safari | Tahun Rilis |
|---|---|---|
| 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 |
Ada cara lain untuk mendeteksi sistem operasi dan browser berdasarkan teknik fingerprinting yang rumit, seperti fingerprinting TLS. Karena ada skenario yang sah di mana deteksi sistem operasi yang lebih dalam akan masuk akal, Google memperkenalkan Client Hints untuk dapat menerima informasi ini secara terprogram. Kita akan melihat bagaimana Client Hints bekerja di bab berikutnya.
Client Hints memungkinkan situs web mengakses informasi entropi tinggi yang dihapus dari string User-Agent dengan cara yang ramah privasi. Ada dua metode utama untuk mengakses Client Hints:
Client hints juga dapat digunakan untuk mengambil informasi entropi rendah yang sudah termasuk dalam User-Agent. Ini menyiratkan bahwa di Chrome, di mana client hints didukung, user-agent tidak diperlukan lagi.
Bergantung pada metode akses mana yang digunakan, penamaan Client hints sedikit berbeda. Kami telah mencantumkan nama Client Hints yang paling penting:
| Token HTTP UA-CH | API JS UA-CH | Entropi |
|---|---|---|
| Sec-CH-UA-Platform-Version | UADataValues.platformVersion | Tinggi |
| Sec-CH-UA-Mobile | NavigatorUAData.mobile | Rendah |
| Sec-CH-UA-Model | UADataValues.model | Tinggi |
| Sec-CH-UA | NavigatorUAData.brands | Rendah |
| Sec-CH-UA-Arch | UADataValues.architecture | Tinggi |
Dalam konteks pihak pertama, situs web dapat meminta informasi spesifik tentang browser dan perangkat pengguna menggunakan header permintaan HTTP. Pendekatan ini melibatkan pengaturan header yang benar di respons HTTP server, menunjukkan Client Hints mana yang diinginkan server. Browser kemudian menyertakan petunjuk ini dalam permintaan berikutnya ke asal yang sama.
Header ini memberi sinyal kepada browser untuk mengirim informasi pengguna terperinci di permintaan mendatang, memungkinkan server menyesuaikan respons dengan tepat. Metode ini memastikan bahwa informasi pengguna yang terperinci hanya dapat diakses oleh situs web pihak pertama, mencegah sumber pihak ketiga mendapatkan data entropi tinggi. Ada dua jenis header permintaan yang tersedia yang akan kita bahas sekarang:
Regular Client Hints adalah header yang dapat diminta server dari browser untuk mengumpulkan informasi tentang lingkungan pengguna dalam permintaan berikutnya.
Contoh: Chrome pada macOS 14.5 dengan Client Hints reguler di corbado.com
| Header | Nilai |
|---|---|
| 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" |
| Header | Nilai |
|---|---|
| Accept-CH | Sec-CH-UA-Platform-Version |
| Header | Nilai |
|---|---|
| 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" |
Pada saat yang sama, User-Agent untuk permintaan ini akan tetap sama (tanpa versi platform):
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
Menggunakan https://user-agent-client-hints.glitch.me/headers, Anda sebenarnya dapat bermain-main dengan bagaimana berbagai tata letak informasi akan terlihat untuk petunjuk reguler (ingat Anda harus menggunakan Chrome). Lihat di sini untuk detail selengkapnya. Jika corbado.com membutuhkan informasi ini pada permintaan halaman pertama kali, maka menggunakan Regular Client Hints tidak akan cukup, tetapi ada cara untuk mempercepat proses ini dengan critical (client) hints.
Misalkan corbado.com akan membutuhkan platform-version pada permintaan pertama untuk merender halaman unduhan yang tepat yang disesuaikan dengan versi macOS yang tepat. Ini dapat menggunakan Critical (client) hints yang akan menyebabkan percobaan ulang langsung atas permintaan untuk hanya merender halaman termasuk header:
Contoh: Chrome pada macOS 14.5 dengan critical Client Hints di corbado.com
| Header | Nilai |
|---|---|
| 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" |
| Header | Nilai |
|---|---|
| Accept-CH | Sec-CH-UA-Platform-Version |
| Header | Nilai |
|---|---|
| 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" |
Pada grafik berikut, kita melihat contoh lain di mana situs web meminta model perangkat sebagai bagian kritis dengan header Critical-CH. Seperti yang bisa kita lihat, klien mencoba ulang permintaan seperti pada contoh di atas (grafik urutan kiri).
Client hints dengan Chromium: https://developers.google.com/privacy-sandbox/protections/User-Agent
Oleh karena itu, menggunakan critical Client Hints menambah latensi karena browser harus memulai permintaan kedua segera dengan menambahkan bolak-balik (roundtrips). Ada cara untuk mengoptimalkan transfer dengan memfasilitasi handshake TLS (kotak hijau di bagian atas grafik) untuk segera mengirimkan detail. Pendekatan yang memfasilitasi ALPN (Application-Layer Protocol Negotiation) dapat ditemukan di sini secara detail tetapi berada di luar tujuan artikel ini.
Untuk menerima informasi tambahan menggunakan header, konfigurasi perlu ditambahkan baik ke backend atau ke webserver / load balancer. Ini mudah dilakukan dalam konteks pihak pertama, ketika Anda memiliki kontrol penuh atas situs web sebagai perusahaan. Misalnya, komponen UI kami di corbado.com memerlukan versi platform untuk meningkatkan presisi passkey intelligence kami. Developer mengintegrasikan komponen kami pada berbagai halaman dan mengharuskan mereka untuk menambahkan header dan kemudian meneruskan informasi tersebut ke komponen kami akan menjadi overhead yang tidak menyenangkan. Untuk SPA dan aplikasi JavaScript tertanam lainnya, ada antarmuka lain yang dapat digunakan, yang akan dijelaskan di bagian berikutnya.
Menggunakan fungsi
navigator.userAgentData.getHighEntropyValues(),
Client hints juga dapat diakses melalui API JavaScript, yang memberikan cara yang fleksibel dan
dinamis untuk meminta informasi spesifik tentang browser dan perangkat pengguna. Metode ini
melibatkan penggunaan objek navigator.userAgentData dalam skrip halaman web untuk
meminta Client Hints. Metode ini tidak mengharuskan header Client Hint ditetapkan,
tetapi ini hanya berfungsi pada browser yang mendukung navigator.userAgentData (browser
berbasis Chromium seperti Chrome dan Edge). Firefox dan Safari tidak mendukung API ini, sehingga
developer harus mendeteksi fitur dan memberikan fallback.
Misalnya, ketika menjalankan kode ini di Console Chrome pada macOS:
if (navigator.userAgentData) { navigator.userAgentData .getHighEntropyValues(["architecture", "model", "platformVersion"]) .then((ua) => { console.log(ua); }); }
Ketika promise selesai (resolves), informasi yang relevan dikembalikan. Seperti yang kami uraikan di atas, nama-nama tersebut tidak sepenuhnya identik dengan header tetapi sangat mirip.
platformVersion kemudian dikembalikan dalam promise dan dapat diakses langsung dari
kode JavaScript yang disematkan. Cakupan untuk fungsi ini jauh lebih rendah daripada
hukum pengurangan User-Agent sebenarnya:
Selain itu, Chrome tidak menawarkan fungsionalitas ini pada iOS karena ia menerapkan WebKit pada iOS karena keterbatasan Apple.
Kami sekarang telah mengumpulkan fakta terpenting tentang pengurangan User-Agent dan bagaimana Client hints menawarkan jalan keluarnya di Chrome.
Bergantung pada use case Anda, Anda harus menggunakan pendekatan berbeda untuk memastikan aplikasi Anda mendapatkan hasil terbaik:
Tabel berikut merangkum di mana Anda masih dapat mendeteksi versi sistem operasi jika Anda memiliki akses ke User-Agent (UA) dan Client Hints (CH):
| Browser | 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: ❌) |
Dengan memilih metode yang tepat berdasarkan kebutuhan spesifik Anda, Anda dapat secara efektif menyeimbangkan kebutuhan informasi pengguna yang mendetail dengan pertimbangan privasi dan kinerja. Jika Anda sangat bergantung pada informasi yang sulit diekstraksi atau benar-benar berbasis perangkat, beralihlah ke library profesional seperti wurfl atau 51degrees.com yang melakukan pekerjaan berat untuk Anda. Kedua library mendukung integrasi tautan klien ke dalam deteksi dan juga memiliki cara khusus (proprietary) mereka sendiri untuk mendeteksi model iPhone.
Di Corbado, kami berfokus untuk mengembangkan solusi seputar kunci sandi (passkeys) menggunakan komponen UI yang sebagian besar dikembangkan dengan React. Komponen kami disematkan ke dalam berbagai situs web, jadi kami mengikuti rekomendasi kami sendiri dan menggunakan getHighEntropyValues() di mana pun tersedia, kembali ke penguraian User-Agent klasik untuk semua kasus lainnya. Kami utamanya menggunakan ini untuk:
Detail selengkapnya tentang: https://learn.microsoft.com/en-us/microsoft-edge/web-platform/how-to-detect-win11
Ketika kami mulai mengumpulkan informasi untuk komponen kami, kami menemukan banyak data terfragmentasi yang dibuat selama atau sebelum dimulainya pengurangan User-Agent. Oleh karena itu, kami berpikir bahwa sebuah ringkasan akan membantu developer yang ingin meningkatkan deteksi tetapi tidak bekerja dengan User-Agent atau Client Hints secara rutin.
Setelah deteksi berbasis User-Agent menjadi standar selama beberapa dekade, string User-Agent menjadi kurang rinci untuk melindungi privasi pengguna. Dalam artikel ini kami membahas:
Client hints terus berkembang, dan adopsinya dapat meningkat seiring dengan semakin banyaknya browser dan developer yang menyadari manfaatnya. Namun, masih harus dilihat apakah dukungan mereka akan tersebar luas atau apakah web akan terus terpecah dalam topik ini.
Corbado adalah Authentication Intelligence Platform untuk tim CIAM yang menjalankan autentikasi consumer dalam skala besar. Kami membantu Anda melihat apa yang tidak bisa ditunjukkan oleh log IDP dan tool analytics generik: device, versi OS, browser, dan credential manager mana yang mendukung passkey; mengapa enrollment tidak menjadi login; di mana flow WebAuthn gagal; dan kapan update OS atau browser diam-diam merusak login — semuanya tanpa mengganti Okta, Auth0, Ping, Cognito, atau IDP internal Anda. Dua produk: Corbado Observe menambah observability untuk passkey dan metode login lainnya. Corbado Connect menghadirkan managed passkey dengan analytics terintegrasi (berdampingan dengan IDP Anda). VicRoads menjalankan passkey untuk 5M+ pengguna dengan Corbado (aktivasi passkey +80%). Bicara dengan pakar Passkey →
Apple membekukan string User-Agent iOS/iPadOS di Safari 26, dirilis September 2025, yang berarti versi OS tidak lagi diekspos melalui User-Agent di browser apa pun yang berjalan di iOS. Tidak seperti Chrome di Android atau desktop, tidak ada API Client Hints yang tersedia di browser iOS, jadi versi iOS sebenarnya tidak lagi dapat diakses secara terprogram.
Regular Client Hints, yang diminta melalui header respons Accept-CH, disertakan hanya di
permintaan berikutnya dan tidak tersedia pada pemuatan halaman awal. Critical Client Hints
memicu percobaan ulang browser dengan segera sebelum merender, memastikan bahwa petunjuk tersebut tersedia di
rendernan pertama, tetapi ini menambah putaran latensi (round-trip) ke siklus permintaan.
Apple mengumumkan pembekuan User-Agent di Safari Technology Preview 46 pada tahun 2017 tetapi sebagian membatalkan keputusan tersebut pada tahun 2021 karena masalah kompatibilitas yang signifikan dengan situs web yang mengandalkan informasi User-Agent terbaru. Apple selanjutnya menerapkan pendekatan UA beku yang lebih bertahap daripada pembekuan lengkap secara langsung pada waktu itu.
Safari tidak mendukung Client Hints, tetapi versi macOS dapat disimpulkan dari nomor versi Safari di string User-Agent. Mengurangi tiga dari versi utama Safari secara andal memetakan ke versi utama macOS untuk macOS 10.15 dan di atasnya, berdasarkan keselarasan rilis yang konsisten antara versi Safari dan macOS.
Pendekatan yang direkomendasikan adalah memanggil navigator.userAgentData.getHighEntropyValues() saat
fungsi tersebut didefinisikan, mencakup browser berbasis Chromium, dan kembali menggunakan
library penguraian string User-Agent untuk Firefox dan Safari. Untuk kasus yang memerlukan identifikasi
model perangkat yang sangat spesifik, library profesional seperti wurfl atau 51degrees memberikan
kemampuan deteksi tambahan selain apa yang diungkapkan oleh string User-Agent.
Artikel terkait
Daftar isi