यूज़र एजेंट पार्सर

कोई भी User-Agent स्ट्रिंग चिपकाएँ और ब्राउज़र, रेंडरिंग इंजन, ऑपरेटिंग सिस्टम, डिवाइस वर्ग और CPU आर्किटेक्चर पढ़ें, एक कॉपी करने योग्य JSON ब्रेकडाउन के साथ।

किसी User-Agent स्ट्रिंग को पठनीय रूप में बदलें। आपका अपना User-Agent डिफ़ॉल्ट रूप से लोड होता है। यह देखने के लिए कोई अन्य स्ट्रिंग चिपकाएँ कि वह कैसे विघटित होती है, और किसी बग रिपोर्ट या परीक्षण फ़िक्सचर के लिए JSON ब्रेकडाउन कॉपी करें।

ब्राउज़र
इंजन
ऑपरेटिंग सिस्टम
डिवाइस प्रकार
CPU आर्किटेक्चर

यूज़र-एजेंट स्ट्रिंग्स ऐसी दिखती क्यों हैं

एक-दूसरे जैसा बनने के तीन दशक

एक आधुनिक User-Agent एक विवरण नहीं है, यह एक जीवाश्म अभिलेख है। लगभग हर डेस्कटॉप ब्राउज़र अभी भी Mozilla/5.0 से शुरू होता है, एक टोकन जिसका Netscape के ब्राउज़र युद्ध हारने के बाद से कोई अर्थ नहीं रहा। यह इसलिए बचा है क्योंकि शुरुआती सर्वर फ़्रेम्स परोसने से पहले Mozilla के लिए सूँघते थे, इसलिए हर प्रतियोगी ने डाउनग्रेड होने से बचने के लिए टोकन जोड़ा। एक बार जब कोई ब्राउज़र पेज का अच्छा संस्करण पाने के लिए झूठ बोलता है, तो बाकियों को भी बिल्कुल वैसा ही झूठ बोलना होगा या उपयोगकर्ता खो देंगे।

उसी सर्पिल ने स्ट्रिंग का बाकी हिस्सा पैदा किया। Chrome AppleWebKit/537.36 (KHTML, like Gecko) भेजता है, भले ही उसने 2013 में WebKit का उपयोग बंद कर दिया और KHTML काफी पहले से मृत है। Edge Edge/ के बजाय Edg/ जोड़ता है विशेष रूप से इसलिए क्योंकि बहुत सी साइट्स के पास पुराने टोकन के लिए सबस्ट्रिंग जाँच थी और वे एक टूटा फ़ॉलबैक परोसती थीं। Safari का वास्तविक संस्करण एक Version/ टोकन में छिपा होता है जबकि अंत्य Safari/537.36 जमा हुआ है। यही कारण है कि पार्सिंग को सबसे विशिष्ट से सबसे सामान्य के क्रम में होना चाहिए: हर Chromium फ़ोर्क भी खुद को Chrome बताता है, और हर WebKit ब्राउज़र भी खुद को Safari बताता है, इसलिए पहला आत्मविश्वासी मिलान ही जीतना चाहिए।

आप किस पर भरोसा कर सकते हैं और किस पर नहीं

स्ट्रिंग एक क्लाइंट-प्रदत्त हेडर है, जिसका अर्थ है कि यह एक संकेत है और कभी प्रमाण नहीं। कोई भी HTTP क्लाइंट कुछ भी भेज सकता है, और उपयोगकर्ता नियमित रूप से एक्सटेंशन या डेवलपर टूल्स के माध्यम से इसे स्पूफ करते हैं। इसे किसी लॉग में नैदानिक रंग मानें, न कि किसी प्राधिकरण इनपुट या सुरक्षा सीमा के रूप में।

भले ही कोई झूठ न बोल रहा हो, मान बढ़ते हुए मोटे हो रहे हैं। Chrome और Edge अब माइनर संस्करण खंडों को 0.0.0 पर जमा देते हैं और एक कम किए गए प्लैटफ़ॉर्म स्ट्रिंग की रिपोर्ट करते हैं, इसलिए Windows NT 10.0 Windows 10 और Windows 11 दोनों को कवर करता है और macOS को वास्तविक रिलीज़ की परवाह किए बिना वर्षों से 10_15_7 पर पिन किया गया है। Firefox अपने OS विवरणों को समान रूप से गोल करता है। यदि कोई संस्करण संख्या संदेहास्पद रूप से गोल लगे, तो शायद वह वैसी ही है।

डिवाइस पहचान सबसे कमज़ोर हिस्सा है। स्ट्रिंग में कोई डिवाइस फ़ील्ड नहीं है; यह Mobile, iPad या Tablet जैसे टोकनों की उपस्थिति या अनुपस्थिति से अनुमानित होता है। Android टैबलेट्स क्लासिक जाल हैं, क्योंकि कई को केवल Mobile टोकन की अनुपस्थिति से पहचाना जाता है, और iPadOS जानबूझकर अपने डिफ़ॉल्ट कॉन्फ़िगरेशन में खुद को एक डेस्कटॉप Mac के रूप में प्रस्तुत करता है।

इसके बजाय अधिकांशतः फ़ीचर डिटेक्शन का उपयोग करें

किसी भी चीज़ के लिए जो व्यवहार बदलती है, लेबल के बजाय क्षमता का परीक्षण करें। if ('share' in navigator) सही और टिकाऊ है; if (isSafari) उस क्षण टूट जाता है जब कोई अन्य इंजन वही API भेजता है या Safari कोई सुधार भेजता है। लेआउट के लिए, CSS मीडिया क्वेरीज़ वास्तविक व्यूपोर्ट और इनपुट विधि का वर्णन किसी डिवाइस अनुमान से कहीं बेहतर करती हैं।

जहाँ User-Agent अभी भी अपना स्थान कमाता है वह है एनालिटिक्स, क्रैश ट्रायज और बग्स का पुनरुत्पादन। यह जानना कि कोई स्टैक ट्रेस केवल Gecko पर दिखता है, या कोई लेआउट ब्रेक Samsung Internet तक सीमित है, किसी अपुनरुत्पादनीय रिपोर्ट को एक विशिष्ट परीक्षण मामले में बदल देता है। आधुनिक विकल्प User-Agent Client Hints API है, जो संरचित मानों के रूप में वही तथ्य उजागर करता है और पूर्ण प्लैटफ़ॉर्म संस्करण जैसे उच्च-एन्ट्रॉपी विवरणों के लिए स्पष्ट अनुरोध की माँग करता है।

ओपन-सोर्स नोट: वैनिला JavaScript में, बिना किसी तृतीय-पक्ष लाइब्रेरी के कार्यान्वित।

FAQ

Chrome यह क्यों कहता है कि वह एक साथ Mozilla और Safari है?
ऐतिहासिक संगतता। सर्वर एक समय आधुनिक मार्कअप भेजने से पहले Mozilla के लिए सूँघते थे, और बाद में WebKit-विशिष्ट CSS भेजने से पहले Safari के लिए। हर ब्राउज़र ने खराब पेज परोसे जाने से बचने के लिए वे टोकन जोड़े, और अब उन्हें हटाने से वे साइट्स टूट जाएँगी जो अभी भी जाँच करती हैं।
क्या मैं सुरक्षा निर्णयों के लिए यूज़र एजेंट पर भरोसा कर सकता हूँ?
नहीं। यह एक अनुरोध हेडर है जिसे क्लाइंट पूरी तरह नियंत्रित करता है और किसी भी मान पर सेट कर सकता है। इसका उपयोग केवल नैदानिक और सांख्यिकी के लिए करें। किसी भी चीज़ जो पहुँच देती है या नीति लागू करती है उसे प्रमाणीकरण पर निर्भर होना चाहिए, किसी स्व-रिपोर्ट किए गए स्ट्रिंग पर नहीं।
मेरा macOS संस्करण 10.15.7 के रूप में क्यों रिपोर्ट होता है?
Safari और Chrome जानबूझकर रिपोर्ट किए गए macOS संस्करण को फ़िंगरप्रिंटिंग सतह को कम करने के लिए 10_15_7 पर जमा देते हैं। ब्राउज़र वास्तविक संस्करण जानता है पर उसे हेडर में नहीं डालेगा। Client Hints इसे उजागर कर सकते हैं, पर केवल तब जब साइट स्पष्ट रूप से पूछे।
उपकरण टैबलेट और फ़ोन में अंतर कैसे बताता है?
यह किसी iPad टोकन, Mobile टोकन के बिना किसी Android स्ट्रिंग, या किसी स्पष्ट Tablet मार्कर की तलाश करता है। यह दर्शाता है कि अधिकांश लाइब्रेरीज़ क्या करती हैं, पर यह स्वभाव से एक ह्यूरिस्टिक है। कुछ Android टैबलेट्स केवल स्ट्रिंग से बड़े फ़ोन्स से अभेद्य होती हैं।
क्या यह मेरा User-Agent कहीं भेजता है?
नहीं। पार्सिंग पूरी तरह आपके ब्राउज़र में रेगुलर एक्सप्रेशंस के साथ चलती है, और कुछ अपलोड नहीं किया जाता। डिफ़ॉल्ट मान स्थानीय रूप से navigator.userAgent से पढ़ा जाता है और कभी पेज को नहीं छोड़ता।
यूज़र एजेंट सूँघने के बजाय मुझे क्या उपयोग करना चाहिए?
क्षमताओं के लिए फ़ीचर डिटेक्शन, लेआउट के लिए CSS मीडिया क्वेरीज़, और जब आप वास्तव में प्लैटफ़ॉर्म तथ्य चाहें तो User-Agent Client Hints API। Client Hints संरचित मान देते हैं और उच्च-एन्ट्रॉपी विवरणों को स्पष्ट ऑप्ट-इन के पीछे रखते हैं।