2013-08-06 7 views
7

पर मैं XMLHttpRequest और XDomainRequest पुनर्जन्म के साथ बहुत उलझन में हूं और कुछ मदद चाहूंगा। तो यहाँ मेरी निष्कर्ष हैं: (?)XDomainRequest बनाम XMLHttpRequest IE8 और IE9

  1. IE8 और IE9 में XDomainRequest XMLHttpRequest उप वर्ग
  2. XDomainRequest का अभाव "withCredentials"
  3. XDomainRequest "ऑनलोड" का अभाव है किसी तरह का हो रहा है घटना आपको राज्य और स्थिति IFs का उपयोग करने के लिए मजबूर कर रही है - संपादित करें: यह बिल्कुल सही नहीं है। ऑनलोड उपलब्ध है यदि आप IE8 और IE9 में XDomainRequest को तुरंत चालू करते हैं। यदि आप EI8 या IE9 में XMLHttpRequest को तत्काल प्रारंभ करते हैं, तो ऑनलोड उपलब्ध नहीं है। हम नीचे देखेंगे कि यह क्यों महत्वपूर्ण है।
  4. इसके अलावा, यह डेटा को सादे/पाठ के रूप में प्रस्तुत करता है और न कि फ़ॉर्म के रूप में आपको पिछली छोर पर इनपुटस्ट्रीम का विश्लेषण करने के लिए मजबूर करता है।
  5. भले ही सीओआरएस सर्वर "अनुमति-हेडर" निर्देश क्लाइंट द्वारा सेट-कुकी को पढ़ने की अनुमति देता है, XDomainRequest प्रमाणीकरण के लिए उपयोग किए जाने वाले कुकी संग्रहीत सत्र iDs का उपयोग करने के लिए असंभव बनाने का खुलासा नहीं करता है।
  6. अंत में यदि मैं गलत नहीं हूं, तो यह केवल POST को अनुमति देता है और http विधियों को RestFull वेब सेवाओं के लिए बेकार प्रदान करता है।

यह सूची किसी भी तरह से पूर्ण नहीं है और जैसा कि मैंने कहा है कि यह मेरे निष्कर्षों पर आधारित है। हालांकि, यहां भ्रम शुरू होता है। इसके साथ जुड़े एक सत्र id के साथ एक एन्क्रिप्शन कुंजी प्राप्त के माध्यम से

  • प्राप्त करें (क्रॉस डोमेन): मैं एक मैं चाहिए अजाक्स के माध्यम से आवेदन जहां की है।
  • इस कुंजी का उपयोग करके मेरे उपयोगकर्ता पासवर्ड को एन्क्रिप्ट करें (कोई समस्या नहीं)
  • पोस्ट और एक्स-www-form-urlencoded उपयोगकर्ता नाम और एन्क्रिप्टेड पासवर्ड का उपयोग कर क्रॉस डोमेन (जहां मुझे चरण 1 पर कुंजी मिली) पर लॉग इन करें।
अब सभी उपरोक्त कारणों मैं XDomainRequest साथ ऐसा नहीं कर सकते के लिए

:

  • पहले XDomainRequest है क्योंकि: खुला (विधि, यूआरएल) केवल सादे पाठ भेजता है और मेरे तीसरे पक्ष के आवेदन पत्र की उम्मीद है (मैं एक फिल्टर/अनुरोध इंटरसेप्टर लिख सकता हूं लेकिन यह बात नहीं है)।
  • क्योंकि मेरा सत्र आईडी जो सेट-कुकी हेडर (चरण 1) के माध्यम से एन्क्रिप्शन कुंजी के साथ आता है, कभी भी हेडर के रूप में लॉगिन करते समय क्रॉस डोमेन पर वापस नहीं भेजा जाता है क्योंकि XDomainRequest हेडर का पर्दाफाश नहीं करता है।

फिर भी अगर IE8 और IE9 में मैं एक XMLHttpRequest अनदेखी इन सभी चेक वर्णित here का दृष्टांत, सब ठीक काम कर रहा है !!! ठीक है मुझे ऑनलोड ईवेंट नहीं मिला है और मुझे यकीन नहीं है कि "अनिवार्यता" के साथ कहानी क्या है लेकिन IE8 और IE9 को क्रॉस डोमेन के लिए XMLHttpRequest का उपयोग करने में कोई समस्या नहीं है। पर क्यों? क्या ये सभी विरोधाभासी नहीं हैं? मैं बस इस मुद्दे को समझने की कोशिश कर रहा हूं क्योंकि मुझे डर है कि IE8 और IE9 में XMLHttpRequest का उपयोग करके वापस आ सकता है और किसी बिंदु पर काट सकता है। क्या मैं एक स्पष्ट उदाहरण मांग सकता हूं जब कोई एक का उपयोग कर सकता है, न कि दूसरे? इससे भी बेहतर, आईई 8 और आईई 9 में कभी भी कोई अपडेट था जिसने समस्या को संबोधित किया?

किसी भी मदद की बहुत सराहना की जाएगी Yiannis

उत्तर

2

सबसे पहले टिप्पणी यह:

IE11 XDomainRequest वस्तु deprecates और यह IE11 एज मोड में उपलब्ध नहीं है।

1) XDomainRequest क्या है और आईई के पास यह ऑब्जेक्ट क्यों है? कई साल पहले XMLHTTPRequest 2 spec W3C द्वारा विकसित किया गया था सभी ब्राउज़र XMLHTTPRequest स्तर 1 से अधिक स्तर 2 का निर्माण करते हैं, माइक्रोसॉफ्ट XDomainRequest बनाते हैं। तो XDomainRequest उप-वर्ग नहीं है, यह एक गैर मानक आईई सुविधा है।

2) हां, XDomainRequest में "प्रमाण-पत्र" की कमी है। क्योंकि:

आदेश (आदि जैसे कुकीज़, HTTP क्रेडेंशियल्स, क्लाइंट प्रमाण पत्र,) उपयोगकर्ता का परिवेश अधिकार के दुरुपयोग को रोकने के लिए, अनुरोध कुकीज़ और साख हिस्सा निकाल दिया जाएगा और किसी भी प्रमाणीकरण चुनौतियों या सेट-कुकी पर ध्यान नहीं देगा HTTP प्रतिक्रिया में निर्देश। XDomainRequests पूर्व-प्रमाणीकृत कनेक्शन पर नहीं भेजे जाएंगे, क्योंकि कुछ विंडोज प्रमाणीकरण प्रोटोकॉल (उदा। एनटीएलएम/केर्बेरोस) प्रति-अनुरोध-आधारित के बजाय प्रति कनेक्शन-आधारित हैं।

4)

2014 के रूप में, XDomainRequest किसी भी सामग्री प्रकार हैडर भेजने के लिए प्रकट नहीं होता। यह बदल गया जब यह मेरे लिए स्पष्ट नहीं है।

और आदि। और इसलिए ... मैं इस उत्तर को सिर्फ इतिहास के लिए पोस्ट करता हूं।

XDomainRequest का उपयोग न करें। यह बदसूरत & बदसूरत गैर-मानक सुविधा है।

अधिक यहाँ जानकारी:

  1. http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx
  2. http://www.html5rocks.com/en/tutorials/cors/
  3. http://msdn.microsoft.com/en-us/library/ie/cc288060%28v=vs.85%29.aspx
  4. https://developer.mozilla.org/en-US/docs/Web/API/XDomainRequest
0
but IE8 and IE9 seems to have no problem using the XMLHttpRequest for cross domain 

इस बिंदु ट्रू नहीं है ई। आईई 8/9 में सीओआरएस भेजने का एकमात्र तरीका गैर-मानक XDomainRequest का उपयोग करना है।