2011-11-17 14 views
5

मैं वर्तमान में ब्राउज़र क्षमताओं में देख रहा हूं और .NET 4.0 के साथ आने वाली ब्राउज़र परिभाषा फ़ाइलों का परीक्षण करने का प्रयास कर रहा हूं। ऐसा करने के लिए मैं Firefox के लिए एक ऐड-ऑन का उपयोग कर रहा उपयोगकर्ता एजेंट बदलने के लिए और मैं एक साधारण पृष्ठ जिस पर निम्नलिखित रिपोर्ट है:ब्राउज़र क्षमताओं को देखते समय मुझे इन अजीब नतीजे क्यों मिल रहे हैं?

Request.UserAgent 
Request.Browser.Id 
Request.Browser.Browser 
Request.Browser.MajorVersion 
Request.Browser.MinorVersion 
Request.Browser.Platform 
Request.Browser.IsMobileDevice 
Request.Browser.MobileDeviceManufacturer 
Request.Browser.MobileDeviceModel 

आम तौर पर यह टिप्पणी में दिए गए उदाहरणों के आधार पर सही जानकारी देता है डिफ़ॉल्ट ब्राउज़र परिभाषा फाइलों में। हालांकि मैं समय-समय पर अजीब परिणाम देख रहा हूं कि मैं काफी समझा नहीं सकता।

iphone.browser परिभाषा फ़ाइल जो इस प्रकार है में उदाहरण iPhone उपयोगकर्ता एजेंट लें:

Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3 

यह सफारी, जो यह करता है के रूप में ब्राउज़र लौटना चाहिए। यह सफारी के रूप में सफारी वाले आईफोन गेटवे पर है, जो Safari शब्द से मेल खाता है।

उपयोगकर्ता एजेंट फेरबदल थोड़ा तो यह emulates इस प्रकार एक iPhone पर मेल क्लाइंट के उपयोगकर्ता एजेंट उपयोगकर्ता एजेंट के अंत हिस्से को हटाने का मतलब:

Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) 

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

App_Browsers फ़ोल्डर के साथ एक कस्टम .browser फ़ाइल जोड़ना और फिर संशोधित है कि यह अस्थायी रूप से सही होने के लिए मजबूर करने के लिए लगता है, लगभग परिभाषाओं की तरह या नियमों के कैश्ड किया जा रहा है और पूरी तरह से प्रत्येक अनुरोध पर नहीं चल।

यह दूसरा तरीका भी काम करता है, यदि आप दूसरे उदाहरण उपयोगकर्ता एजेंट से शुरू करते हैं तो पहले विश्लेषण करने पर यह सफारी के बजाय मोज़िला के रूप में रिपोर्ट करेगा।

क्या कोई इस व्यवहार या इसके आसपास काम करने का तरीका बता सकता है? क्या यह कुछ प्रकार (चालाक) चालाक कैशिंग करने की कोशिश कर रहा है जहां यह समान उपयोगकर्ता एजेंटों के आधार पर धारणा करता है?

धन्यवाद।

उत्तर

1

स्ट्रिंग "सफारी" की तलाश में मैच के लिए और भी कुछ है। यदि आप मोनो के एएसपी.Net कार्यान्वयन द्वारा उपयोग किए गए user agent database पर देखते हैं, तो आप देखेंगे कि आपकी पहली और अधिक विशिष्ट उपयोगकर्ता एजेंट स्ट्रिंग अधिक विशिष्ट नियमों में से एक से मेल खाती है, और ब्राउज़र संस्करण सेट किया जाएगा। लेकिन यहां तक ​​कि छंटनी उपयोगकर्ता एजेंट स्ट्रिंग अभी भी एक नियम को हिट करती है जो इसे "आईफोन" के कुछ रूप के रूप में पहचानती है, जिसे बाद में "सफारी" के रूप में प्रस्तुत किया जाता है।

माइक्रोसॉफ्ट के एएसपी.Net सबसे अधिक संभावना एक समान डेटाबेस का उपयोग करता है, मैंने सिर्फ मोनो को उदाहरण के रूप में इस्तेमाल किया क्योंकि कोड वेब पर आसानी से उपलब्ध है।


तो, मैंने अपना जवाब दोबारा संशोधित किया, और महसूस किया कि मैंने पूरी तरह से प्रश्न का गलत व्याख्या किया है! आप सही हैं: कैशिंग यहां कार्रवाई में है। .NET Framework उपयोगकर्ता-एजेंट स्ट्रिंग को पार्स करने में समय बचाने के लिए प्रयास करता है। एक बार UA स्ट्रिंग को पार्स कर दिया जाता है, परिणाम हैश तालिका में सहेजा जाता है। कुंजी UA स्ट्रिंग, छोटा कर दिया गया है।

डिफ़ॉल्ट रूप से यह कुंजी लंबाई 64 वर्ण है, यही कारण है कि जब आप एक लंबे UA स्ट्रिंग के अंत को बदलते हैं तो आप कोई परिवर्तन नहीं देखते हैं।यह सेटिंग UserAgentCacheKeyLengthHttpCapabilitiesDefaultProvider की संपत्ति द्वारा नियंत्रित की जाती है। सत्यापित करने के लिए, मैं अपने परीक्षण परियोजना में Web.config में <system.web> तत्व को

<browserCaps userAgentCacheKeyLength="512" /> 

गयी। इस त्वरित फिक्स के साथ समस्या दूर हो जाती है।

+0

यदि आप जो कह रहे हैं वह सही है तो परिणाम संगत होंगे चाहे कोई भी उपयोगकर्ता एजेंट पहले पार्स किया गया हो, लेकिन यह मेरे उदाहरण में उल्लिखित मामला नहीं है। आप अपने लिए नियम देख सकते हैं, वे 'कॉन्फ़िगर/ब्राउजर' में विंडोज के भीतर प्रासंगिक फ्रेमवर्क फ़ोल्डर के साथ संग्रहीत हैं। आपकी टिप्पणी के लिए "स्ट्रिंग 'सफारी की तलाश में मैच के लिए और भी कुछ है।" यह वही है जो इसे 'सफारी.ब्रोसर' फ़ाइल में देखा जा सकता है, जहां आप इसे मोज़िला से विरासत में देखेंगे और इसे ' ' – rrrr

+0

का उपयोग करके बस विस्तारित करता है इसके लिए केवल संपादन जैसा कि किसी ने सवाल उठाया है, मैं कुछ समय पर इसे फिर से देखूंगा जब मेरे पास समय होगा और आगे की जांच होगी। – rrrr