2013-01-04 40 views
7

मैंने इंटरनेट पर कुछ शोध किया है, लेकिन मुझे इस विषय के बारे में पूरी तस्वीर प्राप्त करने का प्रबंधन नहीं हुआ। क्या कोई इस जवाब को हमेशा और हमेशा के लिए हल करने में मदद कर सकता है?क्या मैं क्रॉस डोमेन जेसन अनुरोधों में हेडर सेट कर सकता हूं?

यह मैं अब तक क्या मिला है:

  • यह jsonp साथ क्रॉस-डोमेन कॉल करने के लिए संभव है। Jsonp कॉल में हेडर को बदलने की अनुमति कभी भी
  • सर्वर को अनुमति देने पर जेसन के साथ क्रॉस डोमेन कॉल करना संभव है।

    $.ajax({ 
        type: "GET", 
        crossDomain: true, 
        beforeSend: function (request) { 
         request.setRequestHeader("Authorization", "Bearer " + ($("#accesstoken").val())); 
        }, 
        contentType: "application/json; charset=utf-8", 
        url: myJSonServer + encodeURI(operation), 
        dataType: 'json', 
        cache: false, 
        success: callback, 
        error: function (jqXhr, textStatus, errorThrown) { alert(textStatus + ": " + errorThrown); } 
    }); 
    

    यह क्या हो रहा है है:

    • जब myJSonServer एक ही डोमेन पर है, वहाँ सभी
    • में कोई समस्या नहीं है

    यह मैं क्या करने की कोशिश कर रहा हूँ

  • जब MyJSonServer किसी अन्य डोमेन पर है अनुरोध अनुरोध भेजा जाता है, लेकिन बेयरर हेडर के बिना

यह बेयरर हेडर OAuth2 मानक का हिस्सा है।

मुझे इस तथ्य से अवगत है कि शायद यह ब्राउज़र में एक्सेस टोकन सेट करने का सबसे अच्छा समाधान नहीं है। और मुझे पता है कि मैं इस स्थिति के लिए प्रॉक्सी का उपयोग कर सकता हूं।

मैं केवल उत्सुक हूं यदि हेडर को क्रॉस-डोमेन जेसन अनुरोध पर सेट करना संभव है या नहीं?
धन्यवाद

- समस्या

मैं MVC4 उपयोग कर रहा था हल और web.config में crossDomainScriptAccessEnabled = "true" जोड़ा। मैंने सोचा कि यह पर्याप्त होगा, लेकिन apsillers के जवाब मेरी समस्या हल हो गई। अब मैं अपने web.config में इस जोड़ लिया है:

<system.webServer> 
    <httpProtocol> 
     <customHeaders> 
     <add name="Access-Control-Allow-Origin" value="*" /> 
     <add name="Access-Control-Allow-Headers" value="Authorization" /> 
     </customHeaders> 
     </httpProtocol> 
    </system.webServer> 
+0

[क्रॉस-उत्पत्ति 'प्राधिकरण' के संभावित डुप्लिकेट jquery.ajax() के साथ शीर्षलेख (http://stackoverflow.com/questions/9559947/cross-origin- प्राधिकरण-header-with-jquery-ajax)। – apsillers

उत्तर

10

JSONP के साथ, कस्टम हेडर सेट करना संभव नहीं है।

सीओआरएस के साथ, सर्वर को Access-Control-Allow-Headers शीर्षलेख क्लाइंट से असामान्य अनुरोध शीर्षलेखों को अनुमति देने के लिए भेजना होगा। HTML5 Rocks CORS page से:

Access-Control-Allow-Headers ... - समर्थित अनुरोध शीर्षकों की अल्पविराम-सीमित सूची।

इस प्रकार, अपने सर्वर ब्राउज़र पता है कि यह अनुमति है अनुरोध के साथ सर्वर से Authorization भेजने के लिए जाने के लिए एक Access-Control-Allow-Headers: Authorization भेजना होगा।इस सेवर हेडर के बिना, ब्राउज़र केवल अनुरोध के साथ कुछ सामान्य शीर्षलेख भेजेगा और बाकी को अनदेखा करेगा।

1

के बाद से "jsonp" एक स्क्रिप्ट टैग बनाने और अन्य डोमेन से संसाधन लोड होने में विशेषता src= का उपयोग करके काम करता है। तो मुझे नहीं लगता कि अनुरोध हेडर को संशोधित करने का कोई तरीका है।

0

यदि आप क्रॉस-मूल अनुरोध करने के लिए JSONP का उपयोग कर रहे हैं - तो उत्तर नहीं है, आप ऐसे अनुरोधों पर HTTP शीर्षलेख सेट नहीं कर सकते हैं। यदि आप क्रॉस-मूल अनुरोध करने के लिए CORS का उपयोग कर रहे हैं - तो उत्तर हाँ है, क्योंकि आप अनुरोध करने के लिए सादा XHR का उपयोग कर रहे हैं: http://en.wikipedia.org/wiki/Cross-origin_resource_sharing