---
url: 'https://www.corbado.com/hi/blog/client-hints-user-agent-chrome-safari-firefox'
title: 'Chrome, Safari और Firefox में Client Hints और User-Agents'
description: 'Chrome, Safari और Firefox में User-Agent और Client Hints API सपोर्ट के बारे में जानें और हम पासकी और डिवाइस डिटेक्शन के लिए JavaScript कंपोनेंट्स में इनका उपयोग कैसे करते हैं।'
lang: 'hi'
author: 'Vincent Delitz'
date: '2026-07-27T08:24:31.477Z'
lastModified: '2026-07-27T08:25:49.166Z'
keywords: 'user-agent reduction, user-agent, client hints, user-agent client hints api, client hints api, client hints browser support, user agent string, client hints chrome'
category: 'Engineering'
---

# Chrome, Safari और Firefox में Client Hints और User-Agents

## Key Facts

- **User-Agent रिडक्शन** सभी प्रमुख ब्राउज़रों में पूरा हो चुका है: 2023 से Chrome और Edge में, Firefox में आंशिक रूप से और सितंबर 2025 में रिलीज़ हुए iOS 26 के बाद से Safari में फ़्रीज़ कर दिया गया है।
- **Firefox, Client Hints** या `navigator.userAgentData` का सपोर्ट नहीं करता है, जिसके कारण डेवलपर्स को Mozilla के ब्राउज़र पर क्लासिक User-Agent स्ट्रिंग पार्सिंग का सहारा लेना पड़ता है।
- **`getHighEntropyValues()`** JavaScript API केवल Chromium ब्राउज़रों में हाई-एंट्रॉपी डिवाइस डेटा एक्सेस करता है। Safari और Firefox में यह API बिल्कुल नहीं है।
- केवल User-Agent स्ट्रिंग के माध्यम से **Windows 10 बनाम Windows 11** में अंतर करना असंभव है। केवल Chrome और Edge पर Client Hints ही वास्तविक प्लेटफ़ॉर्म वर्ज़न का खुलासा कर सकते हैं।
- Corbado **पासकी इंटेलिजेंस** के लिए Client Hints का उपयोग करता है: नए डिवाइस का पता लगाना और क्रॉस-डिवाइस ऑथेंटिकेशन योग्यता का मूल्यांकन करना, विशेष रूप से Windows वर्ज़न के बीच अंतर करने के लिए।

## 1. परिचय: Client Hints और User-Agent रिडक्शन क्या हैं?

विभिन्न यूज़र एनवायरनमेंट का पता लगाने और उन पर प्रतिक्रिया करने के तरीके लगातार बदल रहे हैं। पारंपरिक रूप से, **User-Agent स्ट्रिंग** ब्राउज़र और डिवाइस की जानकारी की पहचान करने का तरीका रहा है, जिससे वेबसाइटें अपने अनुभवों को उसी के अनुसार तैयार कर पाती हैं। हालाँकि, इन स्ट्रिंग्स का उपयोग अक्सर मार्केटिंग कारणों से यूज़र्स की सहमति के बिना उन्हें पहचानने और फिंगरप्रिंटिंग के लिए किया जाता रहा है, जिससे प्राइवेसी संबंधी चिंताएँ बढ़ गई हैं।

इस संदर्भ में, **JavaScript APIs के रूप में Client Hints** एक उपकरण के रूप में उभरे हैं, जो यूज़र के डिवाइस और प्राथमिकताओं के बारे में आवश्यक जानकारी शेयर करने के लिए एक अधिक नियंत्रित और प्राइवेसी-अनुकूल तरीका प्रदान करते हैं। यह लेख **User-Agent रिडक्शन के परिणामों** पर केंद्रित है और यह बताता है कि कैसे Client Hints इस नई स्थिति के अनुकूल होने में मदद करते हैं।

मुख्य बिंदु जिन पर हम चर्चा करेंगे:

- **User-Agent रिडक्शन क्या है:** कम किए गए User-Agent स्ट्रिंग्स की ओर बदलाव और इसके प्रभावों को समझना।
- **Client Hints कैसे काम करते हैं:** Client Hints के पीछे के तंत्र को खोजना और उन्हें प्रभावी ढंग से कैसे लागू किया जा सकता है।

चूंकि ब्राउज़रों और ऑपरेटिंग सिस्टम का अपना-अपना नज़रिया होता है और वे अपने दृष्टिकोण को अलग-अलग तरीके से अपनाते हैं, इसलिए सॉफ़्टवेयर डेवलपर्स को यह सुनिश्चित करने की चुनौती का सामना करना पड़ता है कि उनके एप्लिकेशन अभी भी ब्राउज़र और ऑपरेटिंग सिस्टम में भिन्न यूज़र एनवायरनमेंट का सटीक रूप से पता लगा सकें और उन पर प्रतिक्रिया दे सकें।

इस लेख का उद्देश्य इन परिवर्तनों का एक व्यापक अवलोकन प्रदान करना है, यदि उनका उपयोग केस या सॉफ़्टवेयर डिवाइस या ऑपरेटिंग सिस्टम विवरण (जैसे विस्तृत डिवाइस प्रबंधन, ज्ञात उपकरणों का पता लगाना, धोखाधड़ी की रोकथाम या अन्य फीचर डिटेक्शन) पर निर्भर करता है, तो डेवलपर्स की सहायता के लिए अंतर्दृष्टि और व्यावहारिक मार्गदर्शन प्रदान करना है, या हमारे अपने मामले की तरह **User-Agent और Client Hints के साथ पासकी अनुभव को अनुकूलित करना** है।

इससे पहले कि हम Client Hints के बारे में तकनीकी विवरणों में गोता लगाएँ, हम संक्षेप में User-Agent के इतिहास और विभिन्न User-Agent रिडक्शन प्रयास कैसे काम करते हैं, इसका पता लगाएँगे।

### 1.1 User-Agent का संक्षिप्त इतिहास

User-Agent स्ट्रिंग्स का इतिहास शुरुआती वेब ब्राउज़रों की शुरुआत से खोजा जा सकता है। टिम बर्नर्स-ली ने 1990 में पहला वेब ब्राउज़र, WorldWideWeb (बाद में इसका नाम बदलकर Nexus कर दिया गया) विकसित किया था। इसके तुरंत बाद 1991 में Line Mode Browser जैसे अन्य अग्रणी ब्राउज़र आए, और बाद में MidasWWW, ViolaWWW, Erwise और Cello जैसे ब्राउज़र उभरे।

1993 में, [NCSA Mosaic](https://en.wikipedia.org/wiki/NCSA_Mosaic) की रिलीज़, जिसे अक्सर केवल Mosaic कहा जाता है, को वेब लोकप्रियता में शुरुआती उछाल का श्रेय दिया जाता है। Mosaic का User-Agent स्ट्रिंग काफी सीधा था, जिसे आमतौर पर `NCSA_Mosaic/1.0` के रूप में स्वरूपित किया जाता था, जिसमें उत्पाद का नाम और उसके बाद एक वैकल्पिक स्लैश और वर्ज़न नंबर होता था।

प्रारंभ में, **User-Agent फ़ील्ड विश्लेषणात्मक उद्देश्यों और समस्याओं की पहचान करने में मदद के लिए पेश किया गया था**। यह स्पष्ट रूप से अनुशंसित किया गया था कि इस फ़ील्ड को HTTP अनुरोधों में "शामिल किया जाना चाहिए", जैसा कि 1992 से W3C HTTP संग्रह में उल्लेख किया गया है। यह सीधा फ़ील्ड उत्पाद का नाम और वर्ज़न बताने का एक सरल लेकिन प्रभावी तरीका प्रदान करता था, जिससे ब्राउज़र से संबंधित समस्याओं को समझने और निवारण करने में मदद मिलती थी।

जैसे-जैसे वेब विकसित हुआ, वैसे-वैसे User-Agent स्ट्रिंग्स की जटिलता और उपयोग भी विकसित हुआ। वे अधिक विस्तृत हो गए और ब्राउज़र, ऑपरेटिंग सिस्टम और डिवाइस के बारे में ढेर सारी जानकारी शामिल करने लगे। हालाँकि यह जानकारी वेब एनालिटिक्स और यूज़र अनुभवों को अनुकूलित करने के लिए मूल्यवान थी, लेकिन इसने **महत्वपूर्ण प्राइवेसी चिंताएँ** भी पैदा कीं। विस्तृत User-Agent स्ट्रिंग्स **ने डिवाइस फ़िंगरप्रिंटिंग की अनुमति दी**, जिससे विज्ञापनदाताओं और ट्रैकर्स को यूज़र्स की अनूठी प्रोफ़ाइल बनाने और विभिन्न वेबसाइटों पर उनकी ऑनलाइन गतिविधियों को ट्रैक करने में सक्षमता मिली।

आधुनिक युग में, जहाँ प्राइवेसी यूज़र्स और नियामकों के लिए समान रूप से एक महत्वपूर्ण चिंता का विषय बन गई है, User-Agent स्ट्रिंग्स की विस्तृत प्रकृति को तेजी से समस्याग्रस्त के रूप में देखा गया है। इस अहसास ने User-Agent स्ट्रिंग्स की ग्रैन्युलैरिटी को कम करने के प्रयासों को जन्म दिया है, जिसका उद्देश्य वेब कार्यक्षमता के लिए आवश्यक जानकारी प्रदान करने और यूज़र प्राइवेसी की रक्षा के बीच संतुलन बनाना है।
यह संक्रमण **User-Agent रिडक्शन की शुरुआत को चिह्नित करता है, प्राइवेसी जोखिमों को कम करने और सुरक्षा बढ़ाने के लिए User-Agent स्ट्रिंग्स में शेयर की जाने वाली जानकारी को कम करने की दिशा में एक आंदोलन**।

### 1.2 User-Agent रिडक्शन और Client Hints का परिचय

User-Agent रिडक्शन की दिशा में आंदोलन बढ़ती प्राइवेसी चिंताओं के जवाब के रूप में शुरू हुआ। यहाँ इस विकास में प्रमुख मील के पत्थर का कालानुक्रमिक अवलोकन दिया गया है:

#### 1.2.1 Safari में User-Agents

2017 में, Apple ने Safari Technology Preview 46 (STP 46) में User-Agent स्ट्रिंग को फ़्रीज़ करने की घोषणा करते हुए [एक प्रसिद्ध Twitter पोस्ट के साथ](https://x.com/rmondello/status/943545865204989953) User-Agent रिडक्शन आंदोलन शुरू किया, जिसका उद्देश्य फ़िंगरप्रिंटिंग का मुकाबला करना और प्राइवेसी में सुधार करना था।

![twitter safari user agent reduction](https://www.corbado.com/website-assets/twitter_user_agent_d4776d2a35.png)

हालाँकि, अप-टू-डेट User-Agent जानकारी पर निर्भर वेबसाइटों के साथ महत्वपूर्ण अनुकूलता समस्याओं के कारण 2021 में इस निर्णय को आंशिक रूप से उलट दिया गया था।

#### 1.2.2 Chrome (+ Edge) में User-Agents

2019/2020 में, [Google ने Chrome में User-Agent स्ट्रिंग्स की ग्रैन्युलैरिटी को कम करने की योजना की घोषणा की](https://groups.google.com/a/chromium.org/g/blink-dev/c/-2JIRNMWJ7s/m/u-YzXjZ8BAAJ), जो विशिष्ट ब्राउज़र और डिवाइस जानकारी का अनुरोध करने के लिए एक लचीले और नियंत्रित तरीके के रूप में [User-Agent Client Hints (UA-CH)](https://chromestatus.com/feature/5704553745874944) को पेश करता है। Google ने Chrome Canary और Beta वर्ज़न में User-Agent रिडक्शन का परीक्षण शुरू किया, अनुकूलता और कार्यक्षमता सुनिश्चित करने के लिए फीडबैक एकत्र किया और इसे Android और अन्य सभी Chrome प्लेटफ़ॉर्म के लिए [2023 में पूरा किया गया](https://www.chromium.org/updates/ua-reduction/)। उसी समय, Chrome ने उस जानकारी तक पहुँचने के एक नए तरीके के रूप में **Client Hints पेश किए**। चूंकि Microsoft Edge, Chromium पर आधारित है, इसलिए Microsoft Edge सभी प्लेटफ़ॉर्म पर Chrome की तरह व्यवहार करता है।

#### 1.2.3 Firefox में User-Agents

2021 में, Mozilla इस प्रयास में शामिल हो गया, धीरे-धीरे User-Agent स्ट्रिंग की ग्रैन्युलैरिटी को कम कर दिया लेकिन Mozilla ने **Firefox में Client Hints का समर्थन नहीं करने** का फैसला किया।

#### 1.2.4 User-Agents आज (सितंबर 2025 में अपडेट किया गया)

- **User-Agent रिडक्शन ब्राउज़र के अनुसार भिन्न होता है:** Chromium (Chrome, Edge) ने Client Hints सपोर्ट के साथ पूर्ण UA रिडक्शन लागू किया है। हालाँकि, Safari UA-CH को अपनाए बिना अपने स्वयं के फ़्रीज़ किए गए UA दृष्टिकोण का उपयोग करता है, और Firefox ने `navigator.userAgentData` को लागू नहीं किया है। इकोसिस्टम खंडित बना हुआ है।

- **Client Hints, Chromium के भीतर विकसित हुए हैं:** सभी ब्राउज़र अभी भी User-Agent हेडर भेजते हैं, लेकिन उनमें से अधिकांश में यह पुराने वर्ज़न में फ़्रीज़ हो गया है (नीचे दी गई तालिका देखें)। Chromium के लिए, अधिक जानकारी प्राप्त करने के लिए Client Hints का उपयोग किया जा सकता है।

आइए देखें कि वर्तमान में कौन से ब्राउज़र अगले अध्याय में User-Agents के रूप में भेजते हैं।

## 2. User-Agent रिडक्शन क्या है?

User-Agent रिडक्शन के बारे में बात करते समय इसका मतलब User-Agent स्ट्रिंग के भीतर **जानकारी को कम करना** है। आइए गहराई से जानें कि रिडक्शन से पहले User-Agent में क्या शामिल था।

### 2.1 क्लासिकल User-Agent क्या है?

एक क्लासिकल User-Agent स्ट्रिंग में आमतौर पर निम्नलिखित घटक शामिल होते हैं, जिनका उपयोग कार्यक्षमता का पता लगाने के लिए किया जा सकता है:

`Mozilla/5.0 (Linux; Android 13; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.2.1.0 Mobile Safari/537.36`

- **ऑपरेटिंग सिस्टम:** ऑपरेटिंग सिस्टम का नाम (जैसे, Windows, macOS, Linux)।
- **ऑपरेटिंग सिस्टम वर्ज़न नंबर:** ऑपरेटिंग सिस्टम का विशिष्ट वर्ज़न।
- **ब्राउज़र का नाम:** ब्राउज़र का नाम (जैसे, Chrome, Firefox, Safari)।
- **ब्राउज़र वर्ज़न:** ब्राउज़र का विशिष्ट वर्ज़न।
- **आर्किटेक्चर:** सिस्टम का आर्किटेक्चर (जैसे, x86, ARM)।
- **डिवाइस प्रकार/मॉडल:** डिवाइस के प्रकार या मॉडल के बारे में जानकारी (जैसे, iPhone, Pixel)।
- **अन्य जानकारी:** इसमें प्लेटफ़ॉर्म, बिल्ड नंबर आदि जैसे अतिरिक्त विवरण शामिल हो सकते हैं।

#### 2.1.1 फीचर डिटेक्शन के लिए User-Agent का उपयोग क्यों करें?

ऐतिहासिक रूप से, User-Agent स्ट्रिंग्स का उपयोग अक्सर फीचर और प्लेटफ़ॉर्म डिटेक्शन के लिए किया जाता था, जिससे वेबसाइटों को पता चला कि ब्राउज़र और डिवाइस की विशेषताओं के आधार पर उनकी सामग्री और कार्यक्षमता को कैसे तैयार किया जाए (जैसे कि विशिष्ट बाइनरी के लिए कौन सा डाउनलोड पेश करना है)। मोबाइल फोन और टैबलेट के उदय के साथ लेआउट के लिए यह विशेष रूप से महत्वपूर्ण हो गया था जो मोबाइल फोन को उनके विशिष्ट वर्ज़न पर रीडायरेक्ट करने में सक्षम होने के लिए उत्तरदायी नहीं बनाए गए थे।

हालाँकि, यह दृष्टिकोण अब **इष्टतम नहीं माना जाता है, क्योंकि यह ब्राउज़र क्षमताओं के बारे में मान्यताओं पर निर्भर करता है जो सत्य नहीं हो सकती हैं या पर्याप्त विशिष्ट नहीं हो सकती हैं**। आधुनिक वेब विकास प्रथाएं जहाँ संभव हों विशिष्ट ब्राउज़र सुविधाओं और क्षमताओं की सीधे जाँच करने के लिए **ब्राउज़र APIs के माध्यम से फीचर डिटेक्शन** का उपयोग करने की वकालत करती हैं। यह विधि अधिक विश्वसनीय है और यह सुनिश्चित करती है कि वेबसाइटें User-Agent स्ट्रिंग या ब्राउज़र वर्ज़न की परवाह किए बिना सही ढंग से काम करें। फीचर डिटेक्शन ब्राउज़र की वास्तविक क्षमताओं पर केंद्रित है, जो ब्राउज़र व्यवहार और कार्यक्षमता में अंतर को संभालने के लिए अधिक मजबूत और भविष्य-प्रूफ तरीका प्रदान करता है।

आज तक, यह पूरी तरह से संभव नहीं है क्योंकि कार्यक्षमता का पता लगाने के लिए नए ब्राउज़र APIs अलग-अलग समय पर लागू किए जाते हैं और अक्सर बड़े (जैसे Chromium-आधारित ब्राउज़र) और छोटे ब्राउज़र टीमों (जैसे Firefox) के बीच एक अलग दृष्टिकोण होता है।

#### 2.1.2 फ़िंगरप्रिंटिंग में एंट्रॉपी को समझना: बहुत अधिक जानकारी प्रदान करना एक समस्या क्यों है?

अधिक जानकारी एक वेबसाइट को अधिक "एंट्रॉपी" के साथ फ़िंगरप्रिंट बनाने की व्यापक संभावना प्रदान करती है। इस संदर्भ में एंट्रॉपी विविधता की वह मात्रा है जिसका उपयोग किसी वेबसाइट से विभिन्न विज़िटर्स के बीच एक अनूठा फ़िंगरप्रिंट उत्पन्न करने के लिए किया जा सकता है।

फ़िंगरप्रिंट का उपयोग विभिन्न उद्देश्यों के लिए किया जा सकता है। इसका उपयोग नए डिवाइस की पहचान करके धोखाधड़ी का पता लगाने और अकाउंट टेकओवर को रोकने जैसे सुरक्षात्मक उद्देश्यों के लिए किया जा सकता है, लेकिन इसका उपयोग विज़िटर्स की सहमति के बिना उनकी पहचान करने या अधिक विशिष्ट विज्ञापन लक्ष्यीकरण के लिए भी किया जा सकता है।

User-Agent स्ट्रिंग्स के संदर्भ में, एंट्रॉपी का तात्पर्य अद्वितीय, पहचानने योग्य जानकारी की मात्रा से है जिसका उपयोग व्यक्तिगत यूज़र्स को ट्रैक करने और उन्हें अलग करने के लिए किया जा सकता है।

- **हाई एंट्रॉपी जानकारी:** जैसे कि विशिष्ट ब्राउज़र और OS वर्ज़न, किसी यूज़र के फ़िंगरप्रिंट की विशिष्टता में महत्वपूर्ण योगदान देता है, जिससे उन्हें विभिन्न वेबसाइटों पर ट्रैक करना आसान हो जाता है।
- **लो एंट्रॉपी जानकारी:** सामान्य ब्राउज़र का नाम या ऑपरेटिंग सिस्टम का नाम, कम विस्तृत डेटा प्रदान करता है और यूज़र ट्रैकिंग में कम योगदान देता है क्योंकि अधिक यूज़र्स उन संयोजनों को ले जाते हैं।

User-Agent के नीचे बहुत सी अतिरिक्त जानकारी है जिसका उपयोग एंट्रॉपी के स्रोत के रूप में किया जा सकता है। उदाहरण के लिए, आप [https://coveryourtracks.eff.org](https://coveryourtracks.eff.org) पर एंट्रॉपी के विभिन्न स्रोत पा सकते हैं।

### 2.2 User-Agent एंट्रॉपी में कमी

इसलिए, जब ब्राउज़र User-Agent रिडक्शन के बारे में बात करते हैं, तो वे मुख्य रूप से हाई एंट्रॉपी जानकारी को कम करने का लक्ष्य रखते हैं। यहाँ रिडक्शन के विभिन्न उदाहरण दिए गए हैं:

#### 2.2.1 उदाहरण 1: Chrome User-Agent रिडक्शन

निम्नलिखित में, आपको Android फ़ोन पर Google के Chrome User-Agent रिडक्शन का एक उदाहरण मिलता है:

**पहले:**
`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`

**बाद में:**
`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`

User-Agent का प्रारूप अपरिवर्तित रहा ताकि पुस्तकालयों के मौजूदा पार्सिंग लॉजिक में हस्तक्षेप न हो। निम्नलिखित मान कम कर दिए गए थे:

- ऑपरेटिंग सिस्टम वर्ज़न
- ब्राउज़र माइनर वर्ज़न
- हार्डवेयर मॉडल ![user agent](https://www.corbado.com/website-assets/user_agent_0fe7987aff.png)

ग्राफ़िक विवरण देता है कि ऑपरेटिंग सिस्टम के आधार पर कौन से मान अपडेट होते रहेंगे और हरे रंग के मान दिखाते हैं कि कौन से मान सभी प्लेटफ़ॉर्म पर स्थिर रहेंगे। विभिन्न ऑपरेटिंग सिस्टम मानों के लिए केवल एक प्रकार उपलब्ध होगा जो स्थिर रहेगा:

| **ऑपरेटिंग सिस्टम** | **कम किया गया/निश्चित नाम** |
| -------------------- | --------------------------------- |
| 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                  | कम किया गया (iOS 26+)              |

#### 2.2.2 उदाहरण 2: Firefox User-Agent रिडक्शन

निम्नलिखित में, आपको Mozilla Firefox के User-Agent रिडक्शन का एक उदाहरण मिलता है जो User-Agent रिडक्शन पर Google की अधिकांश स्थितियों का अनुसरण करता है।

यहाँ वर्तमान Firefox वर्ज़न के साथ Windows 11 पर User-Agent का एक उदाहरण दिया गया है:

`Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:127.0) Gecko/20100101 Firefox/127.0`

इस User-Agent में, CPU आर्किटेक्चर, ऑपरेटिंग सिस्टम वर्ज़न और ब्राउज़र माइनर वर्ज़न को फ़्रीज़ कर दिया गया है।

#### 2.2.3 उदाहरण 3: macOS पर Safari User-Agent रिडक्शन

निम्नलिखित में, आपको macOS पर Safari User-Agent रिडक्शन का एक उदाहरण मिलता है।

सबसे पहले, आइए Mac Silicon M2 पर **macOS Sonoma वर्ज़न 14.5 पर एक Safari User-Agent** के साथ शुरुआत करें।

`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 वर्ज़न को `10_15_07` पर कैप कर दिया गया है और आर्किटेक्चर भी `Intel` पर तय किया गया है, जो Mac CPU आर्किटेक्चर की रिपोर्ट नहीं कर रहा है। यह macOS पर Firefox और [Chrome](https://issues.chromium.org/issues/40167872) के लिए भी सही है।

#### 2.2.4 उदाहरण 4: iOS पर Safari User-Agent (अब iOS 26+ में कम हो गया है)

iOS 26 (सितंबर 2025 में रिलीज़) से पहले, iOS पर Safari वास्तविक ऑपरेटिंग सिस्टम वर्ज़न को प्रदर्शित करता था। हालाँकि, **Apple ने अब macOS के समान Safari 26 में iOS/iPadOS User-Agent को फ़्रीज़ कर दिया है**। नीचे दिया गया उदाहरण प्री-iOS 26 User-Agent दिखाता है:

`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`

**ध्यान दें:** iOS 26 से, iOS (Chrome, Firefox, Safari) के सभी ब्राउज़रों में अब macOS के समान फ़्रीज़ किए गए User-Agent स्ट्रिंग्स हैं। नीचे दिए गए उदाहरण प्री-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`

### 2.3 User-Agent रिडक्शन के साथ डिटेक्शन सीमाएँ

कुल मिलाकर, यह स्पष्ट है कि User-Agent को विशेष रूप से हाई एंट्रॉपी जानकारी पर कम किया गया है। निम्नलिखित अवलोकन दिखाता है कि किस प्लेटफ़ॉर्म / ऑपरेटिंग सिस्टम संयोजनों पर User-Agent कम हो गया है।

| **ब्राउज़र**      | **Windows** | **MacOS** | **iOS**                  | **Android**                 |
| ---------------- | ----------- | --------- | ------------------------ | --------------------------- |
| Chrome           | कम किया गया | कम किया गया| कम किया गया (iOS 26+)    | कम किया गया                  |
| Edge             | कम किया गया | कम किया गया| कम किया गया (iOS 26+)    | कम किया गया                  |
| Firefox          | कम किया गया | कम किया गया| कम किया गया (iOS 26+)    | कम किया गया                  |
| Safari           | -           | कम किया गया*| कम किया गया (Safari 26+)**| -                           |
| Samsung Internet | -           | -         | -                        | कम किया गया                  |
| WebViews         | -           | -         | कम किया गया (iOS 26+)    | कम नहीं किया गया (≥ 16: कम किया गया) |

इसलिए, कम किए गए User-Agent के साथ सबसे महत्वपूर्ण डिटेक्शन समस्याएँ हैं (* = macOS वर्ज़न के लिए नीचे दी गई टिप्पणियाँ देखें):

- **Windows 10 और Windows 11 को अलग नहीं किया जा सकता:** अब आप केवल User-Agent के आधार पर Windows 10 और Windows 11 सिस्टम में अंतर नहीं कर सकते हैं।
- **Android डिवाइस और ऑपरेटिंग सिस्टम वर्ज़न को अलग नहीं किया जा सकता:** Apple के विपरीत, Android वास्तविक हार्डवेयर मॉडल को User-Agent में शामिल करता था। अब ऐसा नहीं है। इसलिए, विभिन्न हार्डवेयर मॉडलों को अब केवल User-Agent के माध्यम से अलग नहीं किया जा सकता है। Apple के साथ यह कभी संभव नहीं था।
- **macOS वर्ज़न और आर्किटेक्चर को अलग नहीं किया जा सकता:** User-Agent के आधार पर macOS वर्ज़न और प्लेटफ़ॉर्म आर्किटेक्चर को अलग करने का कोई तरीका नहीं है।
- **(\*) Safari पर macOS वर्ज़न:** Safari ने ऑपरेटिंग सिस्टम वर्ज़न को फ़्रीज़ कर दिया है लेकिन Safari वर्ज़न दिखाना जारी रखता है। 10.15 और उससे ऊपर के लिए लेखन के समय प्रमुख macOS वर्ज़न का पता लगाने के लिए Safari वर्ज़न से तीन घटाना सुरक्षित है।
- **(\*\*) Safari 26+ पर iOS वर्ज़न:** iOS 26 (सितंबर 2025) से, Apple ने macOS के समान iOS/iPadOS User-Agent को फ़्रीज़ कर दिया है। OS वर्ज़न अब प्रदर्शित नहीं होता है।

यहाँ macOS वर्ज़न को उनके संबंधित Safari वर्ज़न में मैप करने वाली एक तालिका दी गई है:

| **macOS वर्ज़न**       | **Safari वर्ज़न** | **रिलीज़ वर्ष** |
| ---------------------- | ------------------ | ---------------- |
| 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             |

TLS फ़िंगरप्रिंटिंग जैसी विस्तृत फ़िंगरप्रिंटिंग तकनीकों के आधार पर ऑपरेटिंग सिस्टम और ब्राउज़रों का पता लगाने के अन्य तरीके हैं। चूँकि वैध परिदृश्य हैं जहाँ एक गहरा ऑपरेटिंग सिस्टम डिटेक्शन समझ में आएगा, Google ने इस जानकारी को प्रोग्रामेटिक रूप से प्राप्त करने में सक्षम होने के लिए Client Hints पेश किए। हम अगले अध्याय में देखेंगे कि Client Hints कैसे काम करते हैं।

## 3. Client Hints कैसे काम करते हैं?

Client Hints वेबसाइटों को प्राइवेसी के अनुकूल तरीके से User-Agent स्ट्रिंग से हटाई गई हाई एंट्रॉपी जानकारी तक पहुँचने में सक्षम बनाते हैं। Client Hints तक पहुँचने के दो प्राथमिक तरीके हैं:

- **HTTP हेडर**: HTTP रिक्वेस्ट हेडर का उपयोग करना, जो केवल फर्स्ट-पार्टी संदर्भों के लिए उपलब्ध है।
- **JavaScript API**: एक JavaScript API का उपयोग करना, जिसका उपयोग एम्बेडेड स्क्रिप्ट द्वारा किया जा सकता है।

Client Hints का उपयोग उस लो एंट्रॉपी जानकारी को पुनः प्राप्त करने के लिए भी किया जा सकता है जो पहले से ही User-Agent में शामिल है। इसका तात्पर्य यह है कि Chrome पर, जहाँ Client Hints सपोर्ट करते हैं, User-Agents की अब आवश्यकता नहीं है।

### 3.1 कौन से Client Hints मौजूद हैं?

यह इस बात पर निर्भर करता है कि किस एक्सेस विधि का उपयोग किया जाता है, Client Hints का नामकरण थोड़ा भिन्न होता है। हमने Client Hints के सबसे महत्वपूर्ण नामों को सूचीबद्ध किया है:
![client hints](https://s3.eu-central-1.amazonaws.com/corbado-cloud-staging-website-assets/client_hints_f186bae2e2.jpg)

| **HTTP UA-CH टोकन**        | **UA-CH JS API**             | **एंट्रॉपी** |
| -------------------------- | ---------------------------- | ----------- |
| Sec-CH-UA-Platform-Version | UADataValues.platformVersion | हाई         |
| Sec-CH-UA-Mobile           | NavigatorUAData.mobile       | लो          |
| Sec-CH-UA-Model            | UADataValues.model           | हाई         |
| Sec-CH-UA                  | NavigatorUAData.brands       | लो          |
| Sec-CH-UA-Arch             | UADataValues.architecture    | हाई         |

### 3.2 HTTP रिक्वेस्ट हेडर के माध्यम से Client Hints तक कैसे पहुंचें

एक फर्स्ट-पार्टी संदर्भ में, वेबसाइटें HTTP रिक्वेस्ट हेडर का उपयोग करके यूज़र के ब्राउज़र और डिवाइस के बारे में विशिष्ट जानकारी का अनुरोध कर सकती हैं। इस दृष्टिकोण में सर्वर के HTTP रिस्पांस में सही हेडर सेट करना शामिल है, जो यह दर्शाता है कि सर्वर किन Client Hints में रुचि रखता है। इसके बाद ब्राउज़र इन हिंट्स को उसी ओरिजिन के बाद के रिक्वेस्ट में शामिल करता है।

यह हेडर ब्राउज़र को भविष्य के रिक्वेस्ट में विस्तृत यूज़र जानकारी भेजने का संकेत देता है, जिससे सर्वर तदनुसार प्रतिक्रियाओं को तैयार कर सकता है। यह विधि सुनिश्चित करती है कि विस्तृत यूज़र जानकारी केवल फर्स्ट-पार्टी वेबसाइट तक ही पहुँच योग्य है, जिससे थर्ड-पार्टी रिसोर्सेज को हाई एंट्रॉपी डेटा प्राप्त करने से रोका जा सके। दो प्रकार के रिक्वेस्ट हेडर उपलब्ध हैं जिन पर हम अभी चर्चा करेंगे:

- रेगुलर Client Hint हेडर
- क्रिटिकल (Client) Hint हेडर

#### 3.2.1 रेगुलर Client Hint हेडर का उपयोग कैसे करें?

रेगुलर Client Hints वे हेडर होते हैं जिन्हें एक सर्वर ब्राउज़र से **बाद के रिक्वेस्ट में** यूज़र के एनवायरनमेंट के बारे में जानकारी इकट्ठा करने के लिए अनुरोध कर सकता है।

**उदाहरण: corbado.com पर रेगुलर Client Hints के साथ macOS 14.5 पर Chrome**

1. Corbado.com के लिए पहले रिक्वेस्ट पर, Chrome पहले से ही निम्नलिखित लो एंट्रॉपी हेडर शामिल करेगा क्योंकि यह जानकारी User-Agent में भी शामिल है।

| **हेडर**           | **मान**                                                           |
| ------------------ | ----------------------------------------------------------------- |
| 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"                                                           |

2. मान लें कि Corbado.com **बाद के रिक्वेस्ट** पर ऑपरेटिंग सिस्टम वर्ज़न (प्लेटफ़ॉर्म वर्ज़न) प्राप्त करना चाहेगा। इसलिए, यह तब पहले रिक्वेस्ट की प्रतिक्रिया में उपयुक्त “Sec-CH-UA-Platform-Version” हेडर सेट करेगा:

| **हेडर**   | **मान**                    |
| ---------- | -------------------------- |
| Accept-CH  | Sec-CH-UA-Platform-Version |

3. **बाद के रिक्वेस्ट** पर, Corbado.com को प्लेटफ़ॉर्म वर्ज़न के साथ एक अतिरिक्त हेडर प्राप्त होगा:

| **हेडर**           | **मान**                                                           |
| ------------------ | ----------------------------------------------------------------- |
| 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"                                                          |

साथ ही, इस रिक्वेस्ट के लिए User-Agent वही रहेगा (प्लेटफ़ॉर्म वर्ज़न के बिना):

`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](https://user-agent-client-hints.glitch.me/headers) का उपयोग करके, आप वास्तव में पता लगा सकते हैं कि रेगुलर हिंट्स के लिए सूचनाओं के विभिन्न लेआउट कैसे दिखेंगे (ध्यान रखें **आपको Chrome का उपयोग करना होगा**)। अधिक विवरण के लिए [यहाँ](https://github.com/WICG/ua-client-hints) देखें। यदि corbado.com को पहले पेज रिक्वेस्ट पर ही इस जानकारी की आवश्यकता होती, तो रेगुलर Client Hints का उपयोग करना पर्याप्त नहीं होता, लेकिन क्रिटिकल (Client) Hints के साथ इस प्रक्रिया को तेज करने का एक तरीका है।

#### 3.2.2 क्रिटिकल (Client) Hint हेडर का उपयोग कैसे करें?

मान लें कि [corbado.com](https://corbado.com) को सटीक macOS वर्ज़न के अनुरूप उचित डाउनलोड पृष्ठ रेंडर करने के लिए पहले रिक्वेस्ट पर प्लेटफ़ॉर्म-वर्ज़न की आवश्यकता होगी। यह क्रिटिकल (Client) Hints का उपयोग कर सकता है जिससे हेडर सहित पृष्ठ को रेंडर करने के लिए **अनुरोध का तत्काल पुनः प्रयास** होगा:

**उदाहरण: corbado.com पर क्रिटिकल Client Hints के साथ macOS 14.5 पर Chrome**

1. corbado.com के लिए पहले रिक्वेस्ट पर, Chrome पहले से ही निम्नलिखित लो एंट्रॉपी हेडर शामिल करेगा क्योंकि यह जानकारी User-Agent में भी शामिल है।

| **हेडर**           | **मान**                                                           |
| ------------------ | ----------------------------------------------------------------- |
| 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"                                                           |

2. मान लें कि corbado.com **पृष्ठ की पहली रेंडरिंग पर** ऑपरेटिंग सिस्टम वर्ज़न (प्लेटफ़ॉर्म वर्ज़न) प्राप्त करना चाहेगा। यह तब पहले रिक्वेस्ट की प्रतिक्रिया में क्रिटिकल Client Hint हेडर “Sec-CH-UA-Platform-Version” सेट करेगा:

| **हेडर**   | **मान**                    |
| ---------- | -------------------------- |
| Accept-CH  | Sec-CH-UA-Platform-Version |

3. Chrome रेंडरिंग शुरू नहीं करेगा और तुरंत रिक्वेस्ट को दोबारा करने का प्रयास करेगा, ताकि **corbado.com की पहली रेंडरिंग पर हेडर उपलब्ध हो**। इसके बाद उसे प्लेटफ़ॉर्म वर्ज़न के साथ अतिरिक्त हेडर प्राप्त होगा:

| **हेडर**                   | **मान**                                                           |
| -------------------------- | ----------------------------------------------------------------- |
| 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"                                                          |

निम्नलिखित चार्ट्स में, हम **एक और उदाहरण देखते हैं** जहाँ वेबसाइट क्रिटिकल-CH हेडर के साथ डिवाइस मॉडल को क्रिटिकल पार्ट के रूप में अनुरोध करती है। जैसा कि हम देख सकते हैं, क्लाइंट ऊपर दिए गए उदाहरण (बाएं अनुक्रम चार्ट) की तरह रिक्वेस्ट को दोबारा करने का प्रयास करता है।

![chromium user agent flow complete](https://www.corbado.com/website-assets/chromium_user_agent_flow_complete_cfbf688661.png)_Chromium के साथ Client hints:
[https://developers.google.com/privacy-sandbox/protections/User-Agent](https://developers.google.com/privacy-sandbox/protections/User-Agent)_

इसलिए क्रिटिकल Client Hints का उपयोग करने से लेटेंसी बढ़ जाती है क्योंकि ब्राउज़र को राउंडट्रिप जोड़ते हुए तुरंत दूसरा रिक्वेस्ट शुरू करना पड़ता है। विवरणों को पहले ही प्रसारित करने के लिए **TLS हैंडशेक को सुविधाजनक बनाकर** (चार्ट के शीर्ष पर हरा बॉक्स) ट्रांसफर को अनुकूलित करने का एक तरीका है। **[ALPN](https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation) (एप्लिकेशन-लेयर प्रोटोकॉल नेगोशिएशन)** को सुविधाजनक बनाने वाला यह दृष्टिकोण विस्तार से [यहाँ](https://docs.google.com/document/d/1HQd3vosjFls2jp6DwpkNMUN4CBdmmxZJJz0WhhcqOPw/edit) पाया जा सकता है, लेकिन यह इस लेख के उद्देश्य से परे है।

हेडर का उपयोग करके अतिरिक्त जानकारी प्राप्त करने के लिए, कॉन्फ़िगरेशन को या तो बैकएंड या वेबसर्वर / लोड बैलेंसर में जोड़ा जाना चाहिए। फर्स्ट-पार्टी संदर्भ में यह आसानी से हो जाता है, जब एक कंपनी के रूप में आपका वेबसाइट पर पूरा नियंत्रण होता है। उदाहरण के लिए, corbado.com पर हमारे UI कंपोनेंट्स को हमारी [पासकी इंटेलिजेंस](https://docs.corbado.com/corbado-connect/features/passkey-intelligence) की सटीकता बढ़ाने के लिए प्लेटफ़ॉर्म वर्ज़न की आवश्यकता होती है। डेवलपर्स विभिन्न पेजों पर हमारे कंपोनेंट्स को इंटीग्रेट करते हैं और उन्हें हेडर जोड़ने और फिर उस जानकारी को हमारे कंपोनेंट्स में पास करने की आवश्यकता एक अप्रिय ओवरहेड होगी। SPAs और अन्य एम्बेडेड JavaScript एप्लिकेशन्स के लिए, एक अन्य इंटरफ़ेस है जिसका उपयोग किया जा सकता है, जिसे अगले भाग में समझाया जाएगा।

### 3.3 JavaScript API (एम्बेडेड स्क्रिप्ट्स) के माध्यम से Client hints तक कैसे पहुँचें

[navigator.userAgentData.getHighEntropyValues()](https://developer.mozilla.org/en-US/docs/Web/API/NavigatorUAData/getHighEntropyValues) फ़ंक्शन का उपयोग करके, Client hints को एक JavaScript API के माध्यम से भी एक्सेस किया जा सकता है, जो यूज़र के ब्राउज़र और डिवाइस के बारे में विशिष्ट जानकारी का अनुरोध करने के लिए एक लचीला और गतिशील तरीका प्रदान करता है। इस विधि में Client Hints को क्वेरी करने के लिए वेब पेज की स्क्रिप्ट के भीतर `navigator.userAgentData` ऑब्जेक्ट का उपयोग करना शामिल है। **इस विधि के लिए Client Hint हेडर सेट होने की आवश्यकता नहीं है, लेकिन यह केवल उन ब्राउज़रों में काम करता है जो `navigator.userAgentData` का समर्थन करते हैं (Chromium-आधारित ब्राउज़र जैसे Chrome और Edge)। Firefox और Safari इस API का समर्थन नहीं करते हैं, इसलिए डेवलपर्स को फ़ीचर-डिटेक्ट करना चाहिए और फ़ॉलबैक प्रदान करना चाहिए।**

उदाहरण के लिए, macOS पर Chrome कंसोल में इस कोड को निष्पादित करते समय:

```javascript
if (navigator.userAgentData) {
    navigator.userAgentData
        .getHighEntropyValues(["architecture", "model", "platformVersion"])
        .then((ua) => {
            console.log(ua);
        });
}
```

जब प्रॉमिस पूरा हो जाता है, तो प्रासंगिक जानकारी लौटा दी जाती है। जैसा कि हमने ऊपर बताया, नाम पूरी तरह से हेडर के समान नहीं हैं, लेकिन बहुत करीब हैं।

![platform version](https://www.corbado.com/website-assets/platform_version_6111c471f1.png)

इसके बाद `platformVersion` प्रॉमिस में लौटाया जाता है और इसे एम्बेडेड JavaScript कोड से सीधे एक्सेस किया जा सकता है। इस फ़ंक्शन की कवरेज वास्तविक User-Agent रिडक्शन से बहुत कम है:

![get high entropy list](https://www.corbado.com/website-assets/get_high_entropy_list_75834fcb30.png)

इसके अतिरिक्त, Chrome iOS पर इस कार्यक्षमता की पेशकश नहीं करता है क्योंकि यह Apple की सीमाओं के कारण iOS पर WebKit को तैनात करता है।

अब हमने User-Agent रिडक्शन के बारे में सबसे महत्वपूर्ण तथ्य और Chrome में Client hints इसे कैसे हल करते हैं, इसे एक साथ रखा है।

## 4. आज User-Agents के इस्तेमाल के लिए सिफारिश

आपके यूज़ केस के आधार पर, आपको यह सुनिश्चित करने के लिए एक अलग दृष्टिकोण अपनाना चाहिए कि आपके एप्लिकेशन को सर्वोत्तम संभव परिणाम मिले:

- **फ़ीचर डिटेक्शन: जहाँ भी संभव हो मौजूदा ब्राउज़र JavaScript APIs का उपयोग करें**। जब भी संभव हो, User-Agent का उपयोग करने के बजाय सीधे कार्यक्षमता का पता लगाने के लिए ब्राउज़र APIs पर निर्भर रहें। यह अधिक विश्वसनीय और भविष्य-प्रूफ है।
- **लो एंट्रॉपी के लिए, डिवाइस टाइप जैसे हिंट्स: User-Agent पर्याप्त है**। यदि आपके एप्लिकेशन को केवल डिवाइस टाइप या अन्य लो एंट्रॉपी विवरण निर्धारित करने की आवश्यकता है, तो User-Agent स्ट्रिंग पर्याप्त विस्तृत होगी। आप इन उद्देश्यों के लिए मौजूदा APIs का भी उपयोग कर सकते हैं।
- **हाई एंट्रॉपी जानकारी और डोमेन नियंत्रण के लिए: हेडर दृष्टिकोण का उपयोग करें**। यदि आपको विस्तृत जानकारी की आवश्यकता है और डोमेन पर नियंत्रण है, तो जहाँ समर्थित हो (Chrome, Edge) हाई एंट्रॉपी जानकारी का अनुरोध करने के लिए HTTP हेडर दृष्टिकोण का उपयोग करें। अन्य सभी ब्राउज़रों (जो Client hint हेडर नहीं भेजते हैं) पर क्लासिक User-Agent का उपयोग करें। यह तय करें कि क्या आपको क्रिटिकल Client Hints का उपयोग करने की आवश्यकता है, इस आधार पर कि क्या आपको तुरंत जानकारी की आवश्यकता है या थोड़ी देरी से काम चल सकता है।
- **JavaScript पुस्तकालयों के लिए: getHighEntropyValues का उपयोग करें**। यदि आप एक JavaScript लाइब्रेरी विकसित कर रहे हैं, तो सबसे अच्छा विकल्प navigator.userAgentData.getHighEntropyValues() फ़ंक्शन का उपयोग करना है ताकि यूज़र के ब्राउज़र और डिवाइस के बारे में विशिष्ट जानकारी का गतिशील रूप से अनुरोध किया जा सके, जब भी यह फ़ंक्शन परिभाषित हो और अन्य मामलों में User-Agent पार्सिंग पुस्तकालयों पर फ़ॉलबैक किया जा सके।

निम्नलिखित तालिका में संक्षेप में बताया गया है कि यदि आपके पास User-Agent (UA) और Client Hints (CH) तक पहुँच है, तो आप अभी भी ऑपरेटिंग सिस्टम वर्ज़न का पता लगाने में कहाँ सक्षम हैं:

| **ब्राउज़र**      | **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: ❌) |

अपनी विशिष्ट आवश्यकताओं के आधार पर उपयुक्त विधि का चयन करके, आप प्राइवेसी और प्रदर्शन विचारों के साथ विस्तृत यूज़र जानकारी की आवश्यकता को प्रभावी ढंग से संतुलित कर सकते हैं। यदि आप अत्यधिक जानकारी पर निर्भर हैं जिसे निकालना मुश्किल है या वास्तव में डिवाइस पर आधारित है तो [wurfl](https://web.wurfl.io/) या [51degrees.com](https://51degrees.com) जैसी पेशेवर पुस्तकालयों पर वापस जाएँ जो आपके लिए भारी काम करती हैं। दोनों पुस्तकालय डिटेक्शन में क्लाइंट लिंक को एकीकृत करने का समर्थन करते हैं और iPhone मॉडल का पता लगाने के लिए उनका अपना मालिकाना तरीका भी है।

## 5. पासकी के लिए User-Agents और Client Hints का उपयोग कैसे करें

Corbado में, हम मुख्य रूप से React के साथ विकसित UI कंपोनेंट्स का उपयोग करके पासकी के आसपास समाधान विकसित करने पर ध्यान केंद्रित करते हैं। हमारे कंपोनेंट्स को विभिन्न वेबसाइटों में एम्बेड किया जाता है, इसलिए हम अपनी स्वयं की सिफारिश का पालन करते हैं और जहाँ भी यह उपलब्ध हो getHighEntropyValues() का उपयोग करते हैं, अन्य सभी मामलों के लिए क्लासिक User-Agent पार्सिंग पर वापस आते हैं। हम मुख्य रूप से इसके लिए इसका उपयोग करते हैं:

- **पासकी प्रबंधन:** हमारी पासकी प्रबंधन साइट पर, हम उस डिवाइस के बारे में सभी उपलब्ध जानकारी प्रदर्शित करते हैं जहाँ पासकी बनाई गई थी।
- **क्रॉस-डिवाइस-ऑथेंटिकेशन:** क्रॉस-डिवाइस ऑथेंटिकेशन के लिए, हम यह निर्धारित करने के लिए ऑपरेटिंग सिस्टम के बारे में जानकारी का उपयोग करते हैं कि क्लाइंट CDA का लाभ उठाने का समर्थन करता है या नहीं। यह विशेष रूप से Windows 10 और 11 के बीच अंतर करते समय महत्वपूर्ण है, जो केवल Chrome और Edge पर Client Hints के साथ संभव है:

![get high entropy value](https://www.corbado.com/website-assets/get_high_entropy_value_538459bd28.png)_अधिक विवरण:
[https://learn.microsoft.com/en-us/microsoft-edge/web-platform/how-to-detect-win11](https://learn.microsoft.com/en-us/microsoft-edge/web-platform/how-to-detect-win11)_

- **पासकी इंटेलिजेंस:** हमारा मानना है कि प्लेटफ़ॉर्म को यह तय करना चाहिए कि पासकी लॉगिन शुरू किया जाना चाहिए या नहीं। इसलिए, हम नए डिवाइस का उपयोग किए जाने का पता लगाने के लिए अपने कंपोनेंट्स में जितना संभव हो उतना लॉजिक इंटीग्रेट करते हैं। ऐसे परिदृश्यों में, एक नया या छोटा ऑपरेटिंग सिस्टम वर्ज़न एक मूल्यवान संकेत है कि चीजें बदल गई होंगी।

जब हमने अपने कंपोनेंट्स के लिए जानकारी संकलित करना शुरू किया, तो हमने User-Agent रिडक्शन की शुरुआत से पहले या उसके दौरान बनाया गया बहुत सारा खंडित डेटा पाया। इसलिए, हमने सोचा कि एक सारांश उन डेवलपर्स की मदद करेगा जो डिटेक्शन में सुधार करना चाहते हैं लेकिन नियमित रूप से User-Agents या Client Hints के साथ काम नहीं करते हैं।

## 6. निष्कर्ष

User-Agent आधारित डिटेक्शन दशकों से मानक होने के बाद, यूज़र प्राइवेसी की रक्षा के लिए User-Agent स्ट्रिंग्स कम विस्तृत हो गई हैं।
इस लेख में हमने कवर किया:

- **User-Agent रिडक्शन क्या है?** User-Agent रिडक्शन यूज़र प्राइवेसी की रक्षा के लिए User-Agent स्ट्रिंग्स के माध्यम से शेयर की जाने वाली जानकारी की मात्रा को कम करने की प्रक्रिया है। यह संक्रमण ऑपरेटिंग सिस्टम वर्ज़न और हार्डवेयर मॉडल जैसे डेटा की ग्रैन्युलैरिटी को कम करता है, जिनका उपयोग पहले विभिन्न वेबसाइटों पर यूज़र्स को फिंगरप्रिंटिंग और ट्रैक करने के लिए किया जाता था। हमने पता लगाया कि यह कमी डेवलपर्स को कैसे प्रभावित करती है और वे इन परिवर्तनों को कैसे अनुकूलित कर सकते हैं।
- **Client Hints कैसे काम करते हैं?** Client Hints अधिक प्राइवेसी-सचेत तरीके से यूज़र के डिवाइस के बारे में विशिष्ट, हाई-एंट्रॉपी जानकारी का अनुरोध करने के लिए एक तंत्र प्रदान करते हैं। HTTP हेडर और JavaScript APIs का उपयोग करके, डेवलपर्स आवश्यक होने पर यूज़र के एनवायरनमेंट के बारे में विस्तृत डेटा तक पहुँच सकते हैं। हमने चर्चा की कि Client Hints कैसे लागू किए जाते हैं, उपलब्ध हिंट्स के प्रकार, और HTTP रिक्वेस्ट हेडर और JavaScript के माध्यम से उन्हें एक्सेस करने के तरीके।

Client Hints का विकास जारी है, और उन्हें अपनाना बढ़ सकता है क्योंकि अधिक ब्राउज़र और डेवलपर्स उनके लाभों को पहचानते हैं। हालाँकि, यह देखना बाकी है कि क्या उनका समर्थन व्यापक हो जाएगा या क्या वेब इस विषय पर विचलित होता रहेगा।

## अक्सर पूछे जाने वाले प्रश्न

### iOS 26 के बाद मेरे वेब ऐप में वास्तविक iOS वर्ज़न कैसे प्राप्त करें?

Apple ने सितंबर 2025 में रिलीज़ हुए Safari 26 में iOS/iPadOS User-Agent स्ट्रिंग को फ़्रीज़ कर दिया, जिसका अर्थ है कि OS वर्ज़न अब iOS पर चलने वाले किसी भी ब्राउज़र पर User-Agent के माध्यम से उजागर नहीं होता है। Android या डेस्कटॉप पर Chrome के विपरीत, iOS ब्राउज़रों पर कोई Client Hints API उपलब्ध नहीं है, इसलिए वास्तविक iOS वर्ज़न अब प्रोग्रामेटिक रूप से एक्सेस करने योग्य नहीं है।

### रेगुलर Client Hints और क्रिटिकल Client Hints में क्या अंतर है?

रेगुलर Client Hints, `Accept-CH` रिस्पांस हेडर के माध्यम से अनुरोधित, केवल बाद के रिक्वेस्ट में शामिल होते हैं और प्रारंभिक पृष्ठ लोड पर अनुपलब्ध होते हैं। क्रिटिकल Client Hints रेंडरिंग से पहले तुरंत ब्राउज़र रीट्राय ट्रिगर करते हैं, यह सुनिश्चित करते हुए कि हिंट पहली रेंडरिंग पर उपलब्ध है, लेकिन यह रिक्वेस्ट चक्र में लेटेंसी का एक राउंड-ट्रिप जोड़ता है।

### Apple ने Safari User-Agent को फ़्रीज़ करने के अपने मूल 2017 के निर्णय को क्यों उलट दिया?

Apple ने 2017 में Safari Technology Preview 46 में User-Agent को फ़्रीज़ करने की घोषणा की, लेकिन अप-टू-डेट User-Agent जानकारी पर निर्भर वेबसाइटों के साथ महत्वपूर्ण अनुकूलता समस्याओं के कारण 2021 में इस निर्णय को आंशिक रूप से उलट दिया। Apple ने बाद में उस समय तत्काल पूर्ण फ़्रीज़ के बजाय एक अधिक क्रमिक फ़्रीज़ किए गए UA दृष्टिकोण को लागू किया।

### अगर Client Hints समर्थित नहीं हैं तो मैं Safari में macOS वर्ज़न का पता कैसे लगा सकता हूँ?

Safari, Client Hints का समर्थन नहीं करता है, लेकिन User-Agent स्ट्रिंग में Safari वर्ज़न नंबर से macOS वर्ज़न का अनुमान लगाया जा सकता है। Safari मेजर वर्ज़न से तीन घटाना Safari और macOS वर्ज़न्स के बीच लगातार रिलीज़ संरेखण के आधार पर, macOS 10.15 और उससे ऊपर के लिए macOS मेजर वर्ज़न पर मज़बूती से मैप करता है।

### क्रॉस-ब्राउज़र डिवाइस डिटेक्शन के लिए JavaScript लाइब्रेरी डेवलपर्स को किस दृष्टिकोण का उपयोग करना चाहिए?

अनुशंसित दृष्टिकोण `navigator.userAgentData.getHighEntropyValues()` को कॉल करना है जब फ़ंक्शन परिभाषित होता है, Chromium-आधारित ब्राउज़रों को कवर करता है, और Firefox और Safari के लिए User-Agent स्ट्रिंग पार्सिंग पुस्तकालयों पर वापस आता है। अत्यधिक विशिष्ट डिवाइस मॉडल पहचान की आवश्यकता वाले मामलों के लिए, wurfl या 51degrees जैसे पेशेवर पुस्तकालय User-Agent स्ट्रिंग्स के उजागर होने से परे अतिरिक्त डिटेक्शन क्षमताएं प्रदान करते हैं।
