User-Agent Client Hints माइग्रेशन: पूरी UA स्ट्रिंग के बिना डिवाइस मापना
Chrome User-Agent स्ट्रिंग को एक जमे हुए खोल में समेट रहा है। जानिए कि प्राइवेसी-फर्स्ट एनालिटिक्स फ़िंगरप्रिंटिंग के बिना Client Hints से डिवाइस संकेत कैसे पढ़ती है।
User-Agent स्ट्रिंग की धीमी मौत
दशकों तक User-Agent रिक्वेस्ट हेडर एनालिटिक्स का वह घोड़ा रहा जो बुनियादी सवालों के जवाब देता था: कौन-सा ब्राउज़र, कौन-सा OS, मोबाइल या डेस्कटॉप? साथ ही यह फ़िंगरप्रिंटिंग की देनदारी भी था। Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/xxx.0.0.0 Safari/537.36 जैसी पूरी UA स्ट्रिंग सटीक वर्शन नंबर और प्लेटफ़ॉर्म की बारीकियाँ लीक करती है, जो दूसरे संकेतों के साथ मिलकर अलग-अलग विज़िटर की पहचान में मदद करती हैं।
Google का User-Agent Reduction प्रयास वर्षों से इस स्ट्रिंग की छँटाई कर रहा है। Chrome अब एक घटी हुई UA भेजता है, जिसमें प्लेटफ़ॉर्म वर्शन जमा दिया गया है और माइनर वर्शन खंड शून्य कर दिए गए हैं। Chrome के दस्तावेज़ों के अनुसार मंशा यह है कि निष्क्रिय रूप से उपलब्ध एंट्रॉपी हटा दी जाए, पर उसकी जगह एक संरचित, माँगने पर मिलने वाला विकल्प बचा रहे: User-Agent Client Hints (UA-CH)।
2026 में एनालिटिक्स बनाने वाले किसी भी व्यक्ति के लिए व्यावहारिक नतीजा साफ़ है। मोटे तौर पर ब्राउज़र परिवार से आगे कुछ भी जानने के लिए पुरानी UA स्ट्रिंग को पार्स करना लगातार कम भरोसेमंद होता जा रहा है — और लगातार ग़लत तरीक़ा भी।
Client Hints वास्तव में कैसे काम करते हैं
UA-CH डिवाइस की जानकारी को एक घनी स्ट्रिंग के बजाय अलग-अलग, माँगे जा सकने वाले हिंट्स में बाँट देता है। कम-एंट्रॉपी वाले हिंट्स हर रिक्वेस्ट के साथ डिफ़ॉल्ट रूप से भेजे जाते हैं:
Sec-CH-UA— ब्रांड और महत्वपूर्ण वर्शन की सूचीSec-CH-UA-Mobile—?0/?1का बूलियनSec-CH-UA-Platform— जैसे"macOS"
उच्च-एंट्रॉपी वाले हिंट्स — पूरा प्लेटफ़ॉर्म वर्शन, आर्किटेक्चर, मॉडल, बिटनेस — तब तक नहीं भेजे जाते जब तक सर्वर उन्हें स्पष्ट रूप से न माँगे। सर्वर उन्हें Accept-CH रिस्पॉन्स हेडर से माँगता है, और फिर ब्राउज़र उन्हें आगे की रिक्वेस्ट में शामिल कर सकता है। Sec- उपसर्ग का अर्थ है कि ये हेडर ब्राउज़र के नियंत्रण में हैं और स्क्रिप्ट से सेट नहीं किए जा सकते — यह एक सार्थक अखंडता गुण है।
यह उलटफेर प्राइवेसी के लिहाज़ से मायने रखता है। डिफ़ॉल्ट रुख़ न्यूनतम प्रकटीकरण का है। अतिरिक्त एंट्रॉपी अब एक सोचा-समझा कदम है, जो आपके ही रिस्पॉन्स हेडर में दर्ज होता है — न कि हर विज़िटर से चुपचाप बटोरी गई कोई चीज़।
इस बदलाव का प्राइवेसी-फर्स्ट पाठ
Monoid जानबूझकर इस सीमा के कम-एंट्रॉपी वाले हिस्से में ही रहता है। हम आर्किटेक्चर, मॉडल या पूरा प्लेटफ़ॉर्म वर्शन खींचने के लिए कभी Accept-CH नहीं भेजते, और जो हिंट्स हमें दिखते हैं उन्हें कभी किसी स्थायी डिवाइस हस्ताक्षर में नहीं जोड़ते। वह फ़िंगरप्रिंटिंग होगी — डिवाइस की विशेषताओं से एक पहचानकर्ता दोबारा गढ़ना — और ठीक यही रोकने के लिए UA रिडक्शन बनाया गया था, और ठीक इसी को ePrivacy निर्देश का अनुच्छेद 5(3) और ब्राउज़रों की एंटी-फ़िंगरप्रिंटिंग नीतियाँ टर्मिनल उपकरण की जानकारी तक पहुँच मानती हैं।
डिफ़ॉल्ट कम-एंट्रॉपी हिंट्स उन सवालों के लिए पर्याप्त हैं जो एनालिटिक्स को पूछने चाहिए:
Sec-CH-UAसे ब्राउज़र परिवार और मेजर वर्शन, संगतता और सपोर्ट की योजना के लिए।Sec-CH-UA-Mobileसे मोबाइल बनाम ग़ैर-मोबाइल, लेआउट और Core Web Vitals के विभाजन के लिए।Sec-CH-UA-Platformसे प्लेटफ़ॉर्म, OS-स्तरीय विभाजन के लिए।
सबसे अहम बात: ये समुच्चय आयाम हैं, प्रति-विज़िटर कुंजियाँ नहीं। लाखों विज़िटर के बीच साझा एक बूलियन और एक प्लेटफ़ॉर्म नाम, अपने आप में कोई सार्थक पहचान-शक्ति नहीं रखते।
एज पर हिंट्स पढ़ना
चूँकि Client Hints साधारण रिक्वेस्ट हेडर हैं, एज वर्कर उन्हें बिना किसी क्लाइंट-साइड स्क्रिप्ट के पढ़ सकता है। Cloudflare पर कम-एंट्रॉपी हिंट्स आने वाले Request ऑब्जेक्ट पर ही पहुँच जाते हैं:
export default {
async fetch(request) {
const brands = request.headers.get('Sec-CH-UA') || '';
const isMobile = request.headers.get('Sec-CH-UA-Mobile') === '?1';
const platform = request.headers.get('Sec-CH-UA-Platform') || '';
// केवल मोटे आयाम निकालें; संयुक्त कुंजी कभी संग्रहीत न करें।
return new Response('ok');
}
};
ध्यान दीजिए कि यहाँ क्या नहीं है: Accept-CH की कोई प्रतिध्वनि नहीं, उच्च-एंट्रॉपी हिंट्स की कोई माँग नहीं, संयुक्त मानों की कोई हैशिंग नहीं। Sec-CH-UA का मान एक संरचित सूची है, इसलिए उसे सावधानी से पार्स करें — उसमें जानबूझकर डाली गई "GREASE" ब्रांड प्रविष्टियाँ होती हैं, जो ठीक-ठीक मिलान पर टिकी नाज़ुक पार्सिंग को रोकने के लिए बनी हैं; यह तरकीब स्पेसिफ़िकेशन ने TLS से उधार ली है।
अपनी पाइपलाइन में क्या बदलें
अगर आपकी एनालिटिक्स अब भी पूरी UA स्ट्रिंग पर रेगेक्स चलाती है, तो समय के साथ तीन चीज़ें टूटेंगी। वर्शन नंबर खिसककर .0.0.0 हो जाएँगे, प्लेटफ़ॉर्म वर्शन जम जाएँगे, और सबस्ट्रिंग मिलान पर आधारित मोबाइल पहचान भरोसे लायक नहीं रहेगी। माइग्रेशन का रास्ता सीधा है:
- UA स्ट्रिंग पार्सिंग के बजाय संरचित कम-एंट्रॉपी हिंट्स को प्राथमिकता दें।
- घटी हुई UA स्ट्रिंग को केवल पुराने क्लाइंट्स के लिए फ़ॉलबैक मानें।
- "बस ज़रूरत पड़ जाए तो" के भाव से उच्च-एंट्रॉपी हिंट्स माँगने के लोभ से बचें — हर अतिरिक्त हिंट आपकी फ़िंगरप्रिंटिंग सतह और अनुपालन जोखिम दोनों बढ़ाता है।
व्यापक सबक़ उस हर चीज़ से मेल खाता है जो हम बनाते हैं। ब्राउज़र निर्माता वेब प्लेटफ़ॉर्म से निष्क्रिय एंट्रॉपी को लगातार हटा रहे हैं। सही जवाब यह नहीं कि नए API के रास्ते उसका पीछा किया जाए, बल्कि यह कि ऐसी मापन-व्यवस्था बनाई जाए जिसे उसकी ज़रूरत कभी थी ही नहीं।
Comments
Loading comments…