Google Books, Android टेक्नोलॉजी स्टैक पर बनाया गया है. इसे ChromeOS के डेस्कटॉप फ़ाउंडेशन के साथ जोड़ा गया है. ज़्यादातर वेब ऐप्लिकेशन, Googlebooks पर उसी तरह काम करने चाहिए जिस तरह वे किसी अन्य डेस्कटॉप डिवाइस पर काम करते हैं. साथ ही, उन्हें ChromeOS की तरह ही User Agent स्ट्रिंग दिखनी चाहिए:
Mozilla/5.0 (X11; CrOS x86_64 14541.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0; Safari/537.36
Googlebooks की ज़्यादा सटीक तरीके से पहचान करने के लिए, जैसे कि आंकड़ों के लिए या उपयोगकर्ताओं को Android के साथ काम करने वाले आपके Android ऐप्लिकेशन को डाउनलोड करने के लिए, आपको दो यूज़र-एजेंट क्लाइंट हिंट का अनुरोध करना होगा: Platform और Mobile क्लाइंट हिंट. ये दोनों कम एंट्रॉपी वाले सुराग हैं. इनसे आपको अतिरिक्त अनुरोधों या अनुमतियों के बिना ही जानकारी मिल जाती है. ठीक उसी तरह जैसे आपको User-Agent स्ट्रिंग से मिलती है. इन्हें सीधे तौर पर, गड़बड़ी का पता लगाने की अपनी मौजूदा सुविधा में शामिल किया जा सकता है.
| UA-CH हेडर | Googlebooks के लिए वैल्यू |
|---|---|
Sec-CH-UA-Platform |
"Android" |
Sec-CH-UA-Mobile |
?0 (गलत) |
ब्राउज़र में इसका पता लगाने के लिए, navigator.userAgentData एपीआई का इस्तेमाल करें:
const isGooglebook = window?.navigator?.userAgentData?.platform === 'Android' && window?.navigator?.userAgentData?.mobile === false;
यूज़र-एजेंट रिडक्शन की वजह से, Googlebooks के लिए खास तौर पर बनाए गए प्लैटफ़ॉर्म को Platform क्लाइंट हिंट या यूज़र एजेंट स्ट्रिंग में नहीं जोड़ा गया था. इसलिए, यह पक्का करने के लिए कि Googlebooks और ChromeOS के पिछले वर्शन में अंतर हो, क्लाइंट हिंट को "Android" में बदल दिया गया. इससे पता चलता है कि Googlebooks, Android ऐप्लिकेशन के साथ काम करते हैं.
सर्वर-साइड पर धोखाधड़ी का पता लगाना
ये दोनों कम एंट्रॉपी वाले क्लाइंट हिंट हैं. इसलिए, इन्हें क्लाइंट के शुरुआती अनुरोध पर आपके सर्वर को भेजा जाएगा. इन्हें इनमें से किसी एक तरीके से चुना जा सकता है:
Node.js
const platform = req.headers['sec-ch-ua-platform'] || 'Not Sent';
const mobile = req.headers['sec-ch-ua-mobile'] || 'Not Sent';
const cleanPlatform = platform.replace(/"/g, '');
const isGooglebook = cleanPlatform === 'Android' && mobile === '?0';
Java
String platform = exchange.getRequestHeaders().getFirst("Sec-CH-UA-Platform");
if (platform == null) platform = "Not Sent";
String mobile = exchange.getRequestHeaders().getFirst("Sec-CH-UA-Mobile");
if (mobile == null) mobile = "Not Sent";
String cleanPlatform = platform.replace("\"", "");
boolean isGooglebook = cleanPlatform.equals("Android") && mobile.equals("?0");
Ruby
mobile = req['Sec-CH-UA-Mobile'] || 'Not Sent'
clean_platform = platform.gsub('"', '')
is_googlebook = clean_platform == 'Android' && mobile == '?0'
Python
platform = self.headers.get('Sec-CH-UA-Platform', 'Not Sent')
mobile = self.headers.get('Sec-CH-UA-Mobile', 'Not Sent')
clean_platform = platform.replace('"', '')
is_googlebook = clean_platform == 'Android' and mobile == '?0'
PHP
$mobile = $_SERVER['HTTP_SEC_CH_UA_MOBILE'] ?? 'Not Sent';
$cleanPlatform = str_replace('"', '', $platform);
$isGooglebook = ($cleanPlatform === 'Android' && $mobile === '?0');
ऐप पर जाएं
platform := r.Header.Get("Sec-CH-UA-Platform")
if platform == "" {
platform = "Not Sent"
}
mobile := r.Header.Get("Sec-CH-UA-Mobile")
if mobile == "" {
mobile = "Not Sent"
}
cleanPlatform := strings.ReplaceAll(platform, "\"", "")
isGooglebook := cleanPlatform == "Android" && mobile == "?0"
अन्य काम के क्लाइंट हिंट
Platform और Mobile क्लाइंट हिंट से यह पता चल जाता है कि आपके उपयोगकर्ता Googlebook का इस्तेमाल कर रहे हैं. हालांकि, आपको उनके डिवाइस के बारे में ज़्यादा जानकारी चाहिए हो सकती है.
[Sec-CH-UA](https://developer.mozilla.org/docs/Web/HTTP/Reference/Headers/Sec-CH-UA) क्लाइंट हिंट, कॉमा लगाकर अलग की गई मुख्य ब्राउज़र वर्शन की सूची और डिवाइस से जुड़े अन्य ब्रैंड दिखाता है. इसे यूज़र-एजेंट स्ट्रिंग से पार्स करने के मुकाबले, आसानी से पार्स किया जा सकता है. Form Factors client
hint
(Sec-CH-UA-Form-Factors) भी उपलब्ध है. यह हाई एंट्रॉपी हिंट है. यह दिए गए डिवाइस के लिए, कॉमा लगाकर अलग की गई फ़ॉर्म फ़ैक्टर की सूची उपलब्ध कराता है. जैसे, डेस्कटॉप, टैबलेट, मोबाइल, ऑटोमोटिव वगैरह. हालांकि, यह अक्सर एक ही डिवाइस का साइज़, डाइमेंशन या कॉन्फ़िगरेशन होता है. इसमें लागू होने वाले सभी डिवाइसों के साइज़, डाइमेंशन या कॉन्फ़िगरेशन शामिल किए जा सकते हैं. इसलिए, अलग किए जा सकने वाले डिवाइस के लिए, उदाहरण के तौर पर "Desktop", "Tablet" दिखाया जा सकता है. अगर आपको यह जानना है कि आपके उपयोगकर्ता किस फ़ॉर्म फ़ैक्टर का इस्तेमाल कर रहे हैं और यह भी जानना है कि वे मोबाइल Android डिवाइस का इस्तेमाल नहीं कर रहे हैं, तो Critical-CH हेडर का इस्तेमाल करें:
GET / HTTP/1.1
Host: example.com
HTTP/1.1 200 OK
Content-Type: text/html
Accept-CH: Sec-CH-UA-Form-Factors
Vary: Sec-CH-UA-Form-Factors
Critical-CH: Sec-CH-UA-Form-Factors
अगर क्लाइंट ने Accept-CH हेडर को प्रोसेस करने के बाद कोई ज़रूरी जानकारी शामिल की है, तो वह अनुरोध को फिर से भेजेगा. इससे आपको शुरुआती जवाब के बजाय, ऑप्टिमाइज़ किया गया पेज दिखाने में मदद मिलती है. इससे एक और दोतरफ़ा यात्रा जुड़ जाती है. इसलिए, इसका इस्तेमाल सिर्फ़ पेज में किए गए ऐसे अहम बदलावों के लिए करें जिनके लिए ज़रूरी जानकारी की ज़रूरत होती है.