यह पेज अपने-आप अनुवादित किया गया है। मूल अंग्रेज़ी संस्करण पढ़ें यहाँ.

Passkeys चीटशीट. passkey कार्यक्रमों के लिए व्यावहारिक मार्गदर्शन, रोलआउट पैटर्न और KPIs।
navigator.userAgentData का सपोर्ट नहीं करता है, जिसके कारण डेवलपर्स को Mozilla के ब्राउज़र पर क्लासिक User-Agent स्ट्रिंग पार्सिंग का सहारा लेना पड़ता है।getHighEntropyValues() JavaScript API केवल Chromium ब्राउज़रों में हाई-एंट्रॉपी डिवाइस डेटा एक्सेस करता है। Safari और Firefox में यह API बिल्कुल नहीं है।विभिन्न यूज़र एनवायरनमेंट का पता लगाने और उन पर प्रतिक्रिया करने के तरीके लगातार बदल रहे हैं। पारंपरिक रूप से, User-Agent स्ट्रिंग ब्राउज़र और डिवाइस की जानकारी की पहचान करने का तरीका रहा है, जिससे वेबसाइटें अपने अनुभवों को उसी के अनुसार तैयार कर पाती हैं। हालाँकि, इन स्ट्रिंग्स का उपयोग अक्सर मार्केटिंग कारणों से यूज़र्स की सहमति के बिना उन्हें पहचानने और फिंगरप्रिंटिंग के लिए किया जाता रहा है, जिससे प्राइवेसी संबंधी चिंताएँ बढ़ गई हैं।
इस संदर्भ में, JavaScript APIs के रूप में Client Hints एक उपकरण के रूप में उभरे हैं, जो यूज़र के डिवाइस और प्राथमिकताओं के बारे में आवश्यक जानकारी शेयर करने के लिए एक अधिक नियंत्रित और प्राइवेसी-अनुकूल तरीका प्रदान करते हैं। यह लेख User-Agent रिडक्शन के परिणामों पर केंद्रित है और यह बताता है कि कैसे Client Hints इस नई स्थिति के अनुकूल होने में मदद करते हैं।
मुख्य बिंदु जिन पर हम चर्चा करेंगे:
चूंकि ब्राउज़रों और ऑपरेटिंग सिस्टम का अपना-अपना नज़रिया होता है और वे अपने दृष्टिकोण को अलग-अलग तरीके से अपनाते हैं, इसलिए सॉफ़्टवेयर डेवलपर्स को यह सुनिश्चित करने की चुनौती का सामना करना पड़ता है कि उनके एप्लिकेशन अभी भी ब्राउज़र और ऑपरेटिंग सिस्टम में भिन्न यूज़र एनवायरनमेंट का सटीक रूप से पता लगा सकें और उन पर प्रतिक्रिया दे सकें।
इस लेख का उद्देश्य इन परिवर्तनों का एक व्यापक अवलोकन प्रदान करना है, यदि उनका उपयोग केस या सॉफ़्टवेयर डिवाइस या ऑपरेटिंग सिस्टम विवरण (जैसे विस्तृत डिवाइस प्रबंधन, ज्ञात उपकरणों का पता लगाना, धोखाधड़ी की रोकथाम या अन्य फीचर डिटेक्शन) पर निर्भर करता है, तो डेवलपर्स की सहायता के लिए अंतर्दृष्टि और व्यावहारिक मार्गदर्शन प्रदान करना है, या हमारे अपने मामले की तरह User-Agent और Client Hints के साथ पासकी अनुभव को अनुकूलित करना है।
इससे पहले कि हम Client Hints के बारे में तकनीकी विवरणों में गोता लगाएँ, हम संक्षेप में User-Agent के इतिहास और विभिन्न User-Agent रिडक्शन प्रयास कैसे काम करते हैं, इसका पता लगाएँगे।
User-Agent स्ट्रिंग्स का इतिहास शुरुआती वेब ब्राउज़रों की शुरुआत से खोजा जा सकता है। टिम बर्नर्स-ली ने 1990 में पहला वेब ब्राउज़र, WorldWideWeb (बाद में इसका नाम बदलकर Nexus कर दिया गया) विकसित किया था। इसके तुरंत बाद 1991 में Line Mode Browser जैसे अन्य अग्रणी ब्राउज़र आए, और बाद में MidasWWW, ViolaWWW, Erwise और Cello जैसे ब्राउज़र उभरे।
1993 में, 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 स्ट्रिंग्स में शेयर की जाने वाली जानकारी को कम करने की दिशा में एक आंदोलन।
User-Agent रिडक्शन की दिशा में आंदोलन बढ़ती प्राइवेसी चिंताओं के जवाब के रूप में शुरू हुआ। यहाँ इस विकास में प्रमुख मील के पत्थर का कालानुक्रमिक अवलोकन दिया गया है:
2017 में, Apple ने Safari Technology Preview 46 (STP 46) में User-Agent स्ट्रिंग को फ़्रीज़ करने की घोषणा करते हुए एक प्रसिद्ध Twitter पोस्ट के साथ User-Agent रिडक्शन आंदोलन शुरू किया, जिसका उद्देश्य फ़िंगरप्रिंटिंग का मुकाबला करना और प्राइवेसी में सुधार करना था।
हालाँकि, अप-टू-डेट User-Agent जानकारी पर निर्भर वेबसाइटों के साथ महत्वपूर्ण अनुकूलता समस्याओं के कारण 2021 में इस निर्णय को आंशिक रूप से उलट दिया गया था।
2019/2020 में, Google ने Chrome में User-Agent स्ट्रिंग्स की ग्रैन्युलैरिटी को कम करने की योजना की घोषणा की, जो विशिष्ट ब्राउज़र और डिवाइस जानकारी का अनुरोध करने के लिए एक लचीले और नियंत्रित तरीके के रूप में User-Agent Client Hints (UA-CH) को पेश करता है। Google ने Chrome Canary और Beta वर्ज़न में User-Agent रिडक्शन का परीक्षण शुरू किया, अनुकूलता और कार्यक्षमता सुनिश्चित करने के लिए फीडबैक एकत्र किया और इसे Android और अन्य सभी Chrome प्लेटफ़ॉर्म के लिए 2023 में पूरा किया गया। उसी समय, Chrome ने उस जानकारी तक पहुँचने के एक नए तरीके के रूप में Client Hints पेश किए। चूंकि Microsoft Edge, Chromium पर आधारित है, इसलिए Microsoft Edge सभी प्लेटफ़ॉर्म पर Chrome की तरह व्यवहार करता है।
2021 में, Mozilla इस प्रयास में शामिल हो गया, धीरे-धीरे User-Agent स्ट्रिंग की ग्रैन्युलैरिटी को कम कर दिया लेकिन Mozilla ने Firefox में Client Hints का समर्थन नहीं करने का फैसला किया।
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 के रूप में भेजते हैं।
Latest news के लिए हमारे Passkeys Substack को subscribe करें.
User-Agent रिडक्शन के बारे में बात करते समय इसका मतलब User-Agent स्ट्रिंग के भीतर जानकारी को कम करना है। आइए गहराई से जानें कि रिडक्शन से पहले 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
ऐतिहासिक रूप से, User-Agent स्ट्रिंग्स का उपयोग अक्सर फीचर और प्लेटफ़ॉर्म डिटेक्शन के लिए किया जाता था, जिससे वेबसाइटों को पता चला कि ब्राउज़र और डिवाइस की विशेषताओं के आधार पर उनकी सामग्री और कार्यक्षमता को कैसे तैयार किया जाए (जैसे कि विशिष्ट बाइनरी के लिए कौन सा डाउनलोड पेश करना है)। मोबाइल फोन और टैबलेट के उदय के साथ लेआउट के लिए यह विशेष रूप से महत्वपूर्ण हो गया था जो मोबाइल फोन को उनके विशिष्ट वर्ज़न पर रीडायरेक्ट करने में सक्षम होने के लिए उत्तरदायी नहीं बनाए गए थे।
हालाँकि, यह दृष्टिकोण अब इष्टतम नहीं माना जाता है, क्योंकि यह ब्राउज़र क्षमताओं के बारे में मान्यताओं पर निर्भर करता है जो सत्य नहीं हो सकती हैं या पर्याप्त विशिष्ट नहीं हो सकती हैं। आधुनिक वेब विकास प्रथाएं जहाँ संभव हों विशिष्ट ब्राउज़र सुविधाओं और क्षमताओं की सीधे जाँच करने के लिए ब्राउज़र APIs के माध्यम से फीचर डिटेक्शन का उपयोग करने की वकालत करती हैं। यह विधि अधिक विश्वसनीय है और यह सुनिश्चित करती है कि वेबसाइटें User-Agent स्ट्रिंग या ब्राउज़र वर्ज़न की परवाह किए बिना सही ढंग से काम करें। फीचर डिटेक्शन ब्राउज़र की वास्तविक क्षमताओं पर केंद्रित है, जो ब्राउज़र व्यवहार और कार्यक्षमता में अंतर को संभालने के लिए अधिक मजबूत और भविष्य-प्रूफ तरीका प्रदान करता है।
आज तक, यह पूरी तरह से संभव नहीं है क्योंकि कार्यक्षमता का पता लगाने के लिए नए ब्राउज़र APIs अलग-अलग समय पर लागू किए जाते हैं और अक्सर बड़े (जैसे Chromium-आधारित ब्राउज़र) और छोटे ब्राउज़र टीमों (जैसे Firefox) के बीच एक अलग दृष्टिकोण होता है।
अधिक जानकारी एक वेबसाइट को अधिक "एंट्रॉपी" के साथ फ़िंगरप्रिंट बनाने की व्यापक संभावना प्रदान करती है। इस संदर्भ में एंट्रॉपी विविधता की वह मात्रा है जिसका उपयोग किसी वेबसाइट से विभिन्न विज़िटर्स के बीच एक अनूठा फ़िंगरप्रिंट उत्पन्न करने के लिए किया जा सकता है।
फ़िंगरप्रिंट का उपयोग विभिन्न उद्देश्यों के लिए किया जा सकता है। इसका उपयोग नए डिवाइस की पहचान करके धोखाधड़ी का पता लगाने और अकाउंट टेकओवर को रोकने जैसे सुरक्षात्मक उद्देश्यों के लिए किया जा सकता है, लेकिन इसका उपयोग विज़िटर्स की सहमति के बिना उनकी पहचान करने या अधिक विशिष्ट विज्ञापन लक्ष्यीकरण के लिए भी किया जा सकता है।
User-Agent स्ट्रिंग्स के संदर्भ में, एंट्रॉपी का तात्पर्य अद्वितीय, पहचानने योग्य जानकारी की मात्रा से है जिसका उपयोग व्यक्तिगत यूज़र्स को ट्रैक करने और उन्हें अलग करने के लिए किया जा सकता है।
User-Agent के नीचे बहुत सी अतिरिक्त जानकारी है जिसका उपयोग एंट्रॉपी के स्रोत के रूप में किया जा सकता है। उदाहरण के लिए, आप https://coveryourtracks.eff.org पर एंट्रॉपी के विभिन्न स्रोत पा सकते हैं।
इसलिए, जब ब्राउज़र 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 का प्रारूप अपरिवर्तित रहा ताकि पुस्तकालयों के मौजूदा पार्सिंग लॉजिक में हस्तक्षेप न हो। निम्नलिखित मान कम कर दिए गए थे:
ग्राफ़िक विवरण देता है कि ऑपरेटिंग सिस्टम के आधार पर कौन से मान अपडेट होते रहेंगे और हरे रंग के मान दिखाते हैं कि कौन से मान सभी प्लेटफ़ॉर्म पर स्थिर रहेंगे। विभिन्न ऑपरेटिंग सिस्टम मानों के लिए केवल एक प्रकार उपलब्ध होगा जो स्थिर रहेगा:
| ऑपरेटिंग सिस्टम | कम किया गया/निश्चित नाम |
|---|---|
| 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+) |
निम्नलिखित में, आपको 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 आर्किटेक्चर, ऑपरेटिंग सिस्टम वर्ज़न और ब्राउज़र माइनर वर्ज़न को फ़्रीज़ कर दिया गया है।
निम्नलिखित में, आपको 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 के लिए भी सही है।
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
कुल मिलाकर, यह स्पष्ट है कि 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 वर्ज़न के लिए नीचे दी गई टिप्पणियाँ देखें):
यहाँ 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 कैसे काम करते हैं।
Client Hints वेबसाइटों को प्राइवेसी के अनुकूल तरीके से User-Agent स्ट्रिंग से हटाई गई हाई एंट्रॉपी जानकारी तक पहुँचने में सक्षम बनाते हैं। Client Hints तक पहुँचने के दो प्राथमिक तरीके हैं:
Client Hints का उपयोग उस लो एंट्रॉपी जानकारी को पुनः प्राप्त करने के लिए भी किया जा सकता है जो पहले से ही User-Agent में शामिल है। इसका तात्पर्य यह है कि Chrome पर, जहाँ Client Hints सपोर्ट करते हैं, User-Agents की अब आवश्यकता नहीं है।
यह इस बात पर निर्भर करता है कि किस एक्सेस विधि का उपयोग किया जाता है, Client Hints का नामकरण थोड़ा भिन्न होता है। हमने Client Hints के सबसे महत्वपूर्ण नामों को सूचीबद्ध किया है:
| 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 | हाई |
एक फर्स्ट-पार्टी संदर्भ में, वेबसाइटें HTTP रिक्वेस्ट हेडर का उपयोग करके यूज़र के ब्राउज़र और डिवाइस के बारे में विशिष्ट जानकारी का अनुरोध कर सकती हैं। इस दृष्टिकोण में सर्वर के HTTP रिस्पांस में सही हेडर सेट करना शामिल है, जो यह दर्शाता है कि सर्वर किन Client Hints में रुचि रखता है। इसके बाद ब्राउज़र इन हिंट्स को उसी ओरिजिन के बाद के रिक्वेस्ट में शामिल करता है।
यह हेडर ब्राउज़र को भविष्य के रिक्वेस्ट में विस्तृत यूज़र जानकारी भेजने का संकेत देता है, जिससे सर्वर तदनुसार प्रतिक्रियाओं को तैयार कर सकता है। यह विधि सुनिश्चित करती है कि विस्तृत यूज़र जानकारी केवल फर्स्ट-पार्टी वेबसाइट तक ही पहुँच योग्य है, जिससे थर्ड-पार्टी रिसोर्सेज को हाई एंट्रॉपी डेटा प्राप्त करने से रोका जा सके। दो प्रकार के रिक्वेस्ट हेडर उपलब्ध हैं जिन पर हम अभी चर्चा करेंगे:
रेगुलर Client Hints वे हेडर होते हैं जिन्हें एक सर्वर ब्राउज़र से बाद के रिक्वेस्ट में यूज़र के एनवायरनमेंट के बारे में जानकारी इकट्ठा करने के लिए अनुरोध कर सकता है।
उदाहरण: corbado.com पर रेगुलर Client Hints के साथ macOS 14.5 पर Chrome
| हेडर | मान |
|---|---|
| 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" |
| हेडर | मान |
|---|---|
| Accept-CH | Sec-CH-UA-Platform-Version |
| हेडर | मान |
|---|---|
| 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 का उपयोग करके, आप वास्तव में पता लगा सकते हैं कि रेगुलर हिंट्स के लिए सूचनाओं के विभिन्न लेआउट कैसे दिखेंगे (ध्यान रखें आपको Chrome का उपयोग करना होगा)। अधिक विवरण के लिए यहाँ देखें। यदि corbado.com को पहले पेज रिक्वेस्ट पर ही इस जानकारी की आवश्यकता होती, तो रेगुलर Client Hints का उपयोग करना पर्याप्त नहीं होता, लेकिन क्रिटिकल (Client) Hints के साथ इस प्रक्रिया को तेज करने का एक तरीका है।
मान लें कि corbado.com को सटीक macOS वर्ज़न के अनुरूप उचित डाउनलोड पृष्ठ रेंडर करने के लिए पहले रिक्वेस्ट पर प्लेटफ़ॉर्म-वर्ज़न की आवश्यकता होगी। यह क्रिटिकल (Client) Hints का उपयोग कर सकता है जिससे हेडर सहित पृष्ठ को रेंडर करने के लिए अनुरोध का तत्काल पुनः प्रयास होगा:
उदाहरण: corbado.com पर क्रिटिकल Client Hints के साथ macOS 14.5 पर Chrome
| हेडर | मान |
|---|---|
| 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" |
| हेडर | मान |
|---|---|
| Accept-CH | Sec-CH-UA-Platform-Version |
| हेडर | मान |
|---|---|
| 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 के साथ Client hints: https://developers.google.com/privacy-sandbox/protections/User-Agent
इसलिए क्रिटिकल Client Hints का उपयोग करने से लेटेंसी बढ़ जाती है क्योंकि ब्राउज़र को राउंडट्रिप जोड़ते हुए तुरंत दूसरा रिक्वेस्ट शुरू करना पड़ता है। विवरणों को पहले ही प्रसारित करने के लिए TLS हैंडशेक को सुविधाजनक बनाकर (चार्ट के शीर्ष पर हरा बॉक्स) ट्रांसफर को अनुकूलित करने का एक तरीका है। ALPN (एप्लिकेशन-लेयर प्रोटोकॉल नेगोशिएशन) को सुविधाजनक बनाने वाला यह दृष्टिकोण विस्तार से यहाँ पाया जा सकता है, लेकिन यह इस लेख के उद्देश्य से परे है।
हेडर का उपयोग करके अतिरिक्त जानकारी प्राप्त करने के लिए, कॉन्फ़िगरेशन को या तो बैकएंड या वेबसर्वर / लोड बैलेंसर में जोड़ा जाना चाहिए। फर्स्ट-पार्टी संदर्भ में यह आसानी से हो जाता है, जब एक कंपनी के रूप में आपका वेबसाइट पर पूरा नियंत्रण होता है। उदाहरण के लिए, corbado.com पर हमारे UI कंपोनेंट्स को हमारी पासकी इंटेलिजेंस की सटीकता बढ़ाने के लिए प्लेटफ़ॉर्म वर्ज़न की आवश्यकता होती है। डेवलपर्स विभिन्न पेजों पर हमारे कंपोनेंट्स को इंटीग्रेट करते हैं और उन्हें हेडर जोड़ने और फिर उस जानकारी को हमारे कंपोनेंट्स में पास करने की आवश्यकता एक अप्रिय ओवरहेड होगी। SPAs और अन्य एम्बेडेड JavaScript एप्लिकेशन्स के लिए, एक अन्य इंटरफ़ेस है जिसका उपयोग किया जा सकता है, जिसे अगले भाग में समझाया जाएगा।
navigator.userAgentData.getHighEntropyValues() फ़ंक्शन का उपयोग करके, Client hints को एक JavaScript API के माध्यम से भी एक्सेस किया जा सकता है, जो यूज़र के ब्राउज़र और डिवाइस के बारे में विशिष्ट जानकारी का अनुरोध करने के लिए एक लचीला और गतिशील तरीका प्रदान करता है। इस विधि में Client Hints को क्वेरी करने के लिए वेब पेज की स्क्रिप्ट के भीतर navigator.userAgentData ऑब्जेक्ट का उपयोग करना शामिल है। इस विधि के लिए Client Hint हेडर सेट होने की आवश्यकता नहीं है, लेकिन यह केवल उन ब्राउज़रों में काम करता है जो navigator.userAgentData का समर्थन करते हैं (Chromium-आधारित ब्राउज़र जैसे Chrome और Edge)। Firefox और Safari इस API का समर्थन नहीं करते हैं, इसलिए डेवलपर्स को फ़ीचर-डिटेक्ट करना चाहिए और फ़ॉलबैक प्रदान करना चाहिए।
उदाहरण के लिए, macOS पर Chrome कंसोल में इस कोड को निष्पादित करते समय:
if (navigator.userAgentData) { navigator.userAgentData .getHighEntropyValues(["architecture", "model", "platformVersion"]) .then((ua) => { console.log(ua); }); }
जब प्रॉमिस पूरा हो जाता है, तो प्रासंगिक जानकारी लौटा दी जाती है। जैसा कि हमने ऊपर बताया, नाम पूरी तरह से हेडर के समान नहीं हैं, लेकिन बहुत करीब हैं।
इसके बाद platformVersion प्रॉमिस में लौटाया जाता है और इसे एम्बेडेड JavaScript कोड से सीधे एक्सेस किया जा सकता है। इस फ़ंक्शन की कवरेज वास्तविक User-Agent रिडक्शन से बहुत कम है:
इसके अतिरिक्त, Chrome iOS पर इस कार्यक्षमता की पेशकश नहीं करता है क्योंकि यह Apple की सीमाओं के कारण iOS पर WebKit को तैनात करता है।
अब हमने User-Agent रिडक्शन के बारे में सबसे महत्वपूर्ण तथ्य और Chrome में Client hints इसे कैसे हल करते हैं, इसे एक साथ रखा है।
आपके यूज़ केस के आधार पर, आपको यह सुनिश्चित करने के लिए एक अलग दृष्टिकोण अपनाना चाहिए कि आपके एप्लिकेशन को सर्वोत्तम संभव परिणाम मिले:
निम्नलिखित तालिका में संक्षेप में बताया गया है कि यदि आपके पास 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 या 51degrees.com जैसी पेशेवर पुस्तकालयों पर वापस जाएँ जो आपके लिए भारी काम करती हैं। दोनों पुस्तकालय डिटेक्शन में क्लाइंट लिंक को एकीकृत करने का समर्थन करते हैं और iPhone मॉडल का पता लगाने के लिए उनका अपना मालिकाना तरीका भी है।
Corbado में, हम मुख्य रूप से React के साथ विकसित UI कंपोनेंट्स का उपयोग करके पासकी के आसपास समाधान विकसित करने पर ध्यान केंद्रित करते हैं। हमारे कंपोनेंट्स को विभिन्न वेबसाइटों में एम्बेड किया जाता है, इसलिए हम अपनी स्वयं की सिफारिश का पालन करते हैं और जहाँ भी यह उपलब्ध हो getHighEntropyValues() का उपयोग करते हैं, अन्य सभी मामलों के लिए क्लासिक User-Agent पार्सिंग पर वापस आते हैं। हम मुख्य रूप से इसके लिए इसका उपयोग करते हैं:
अधिक विवरण: https://learn.microsoft.com/en-us/microsoft-edge/web-platform/how-to-detect-win11
जब हमने अपने कंपोनेंट्स के लिए जानकारी संकलित करना शुरू किया, तो हमने User-Agent रिडक्शन की शुरुआत से पहले या उसके दौरान बनाया गया बहुत सारा खंडित डेटा पाया। इसलिए, हमने सोचा कि एक सारांश उन डेवलपर्स की मदद करेगा जो डिटेक्शन में सुधार करना चाहते हैं लेकिन नियमित रूप से User-Agents या Client Hints के साथ काम नहीं करते हैं।
User-Agent आधारित डिटेक्शन दशकों से मानक होने के बाद, यूज़र प्राइवेसी की रक्षा के लिए User-Agent स्ट्रिंग्स कम विस्तृत हो गई हैं। इस लेख में हमने कवर किया:
Client Hints का विकास जारी है, और उन्हें अपनाना बढ़ सकता है क्योंकि अधिक ब्राउज़र और डेवलपर्स उनके लाभों को पहचानते हैं। हालाँकि, यह देखना बाकी है कि क्या उनका समर्थन व्यापक हो जाएगा या क्या वेब इस विषय पर विचलित होता रहेगा।
Corbado बड़े पैमाने पर consumer authentication चलाने वाली CIAM टीमों के लिए Authentication Intelligence Platform है। हम आपको वह दिखाते हैं जो IDP logs और सामान्य analytics tools नहीं दिखा सकते: कौन-से devices, OS versions, browsers और credential managers passkeys को support करते हैं, क्यों enrollments login में नहीं बदलते, WebAuthn flow कहाँ fail होता है, और कब कोई OS या browser update चुपचाप login को तोड़ देता है — और यह सब Okta, Auth0, Ping, Cognito या आपके in-house IDP को बदले बिना। दो products: Corbado Observe जोड़ता है passkeys और किसी भी अन्य login method के लिए observability। Corbado Connect देता है analytics के साथ built-in managed passkeys (आपके IDP के साथ-साथ)। VicRoads, Corbado के साथ 5M+ users के लिए passkeys चला रहा है (+80% passkey activation)। Passkey विशेषज्ञ से बात करें →
Apple ने सितंबर 2025 में रिलीज़ हुए Safari 26 में iOS/iPadOS User-Agent स्ट्रिंग को फ़्रीज़ कर दिया, जिसका अर्थ है कि OS वर्ज़न अब iOS पर चलने वाले किसी भी ब्राउज़र पर User-Agent के माध्यम से उजागर नहीं होता है। Android या डेस्कटॉप पर Chrome के विपरीत, iOS ब्राउज़रों पर कोई Client Hints API उपलब्ध नहीं है, इसलिए वास्तविक iOS वर्ज़न अब प्रोग्रामेटिक रूप से एक्सेस करने योग्य नहीं है।
रेगुलर Client Hints, Accept-CH रिस्पांस हेडर के माध्यम से अनुरोधित, केवल बाद के रिक्वेस्ट में शामिल होते हैं और प्रारंभिक पृष्ठ लोड पर अनुपलब्ध होते हैं। क्रिटिकल Client Hints रेंडरिंग से पहले तुरंत ब्राउज़र रीट्राय ट्रिगर करते हैं, यह सुनिश्चित करते हुए कि हिंट पहली रेंडरिंग पर उपलब्ध है, लेकिन यह रिक्वेस्ट चक्र में लेटेंसी का एक राउंड-ट्रिप जोड़ता है।
Apple ने 2017 में Safari Technology Preview 46 में User-Agent को फ़्रीज़ करने की घोषणा की, लेकिन अप-टू-डेट User-Agent जानकारी पर निर्भर वेबसाइटों के साथ महत्वपूर्ण अनुकूलता समस्याओं के कारण 2021 में इस निर्णय को आंशिक रूप से उलट दिया। Apple ने बाद में उस समय तत्काल पूर्ण फ़्रीज़ के बजाय एक अधिक क्रमिक फ़्रीज़ किए गए UA दृष्टिकोण को लागू किया।
Safari, Client Hints का समर्थन नहीं करता है, लेकिन User-Agent स्ट्रिंग में Safari वर्ज़न नंबर से macOS वर्ज़न का अनुमान लगाया जा सकता है। Safari मेजर वर्ज़न से तीन घटाना Safari और macOS वर्ज़न्स के बीच लगातार रिलीज़ संरेखण के आधार पर, macOS 10.15 और उससे ऊपर के लिए macOS मेजर वर्ज़न पर मज़बूती से मैप करता है।
अनुशंसित दृष्टिकोण navigator.userAgentData.getHighEntropyValues() को कॉल करना है जब फ़ंक्शन परिभाषित होता है, Chromium-आधारित ब्राउज़रों को कवर करता है, और Firefox और Safari के लिए User-Agent स्ट्रिंग पार्सिंग पुस्तकालयों पर वापस आता है। अत्यधिक विशिष्ट डिवाइस मॉडल पहचान की आवश्यकता वाले मामलों के लिए, wurfl या 51degrees जैसे पेशेवर पुस्तकालय User-Agent स्ट्रिंग्स के उजागर होने से परे अतिरिक्त डिटेक्शन क्षमताएं प्रदान करते हैं।
संबंधित लेख
विषय सूची