2013-06-04 13 views
5

में एक HTTP बेसिक एथ हेडर सेट नहीं कर सकता है मैंने कोणीय जेएस का उपयोग करके HTTP बेसिक एथ का परीक्षण करने के लिए निम्न नियंत्रक लिखा था।AngularJS

function TestCtrl($scope, $http, Base64){ 
    $http.defaults.headers.common.Authorization = 'Basic ' + Base64.encode('admin:secret'); 
    $http.jsonp('http://localhost:5000/test'+'/?callback=JSON_CALLBACK', {query:{isArray:true }}). 
    then(function (response) { 
     $scope.test = response.data; 
    }); 
} 

मैं देख सकता हूँ हैडर स्थापित किया जा रहा जब मैं console.log($http.defaults.headers)। लेकिन जब मैं फ़ायरफ़ॉक्स में क्रोम डेवलपर टूलबार या फ़ायरबग का उपयोग कर अनुरोध शीर्षलेखों की जांच करता हूं, तो मुझे प्राधिकरण शीर्षलेख दिखाई नहीं देता है।

अनुरोध प्राप्त करने वाले सर्वर को प्राधिकरण शीर्षलेख नहीं मिलता है।

मैं यहाँ क्या गलत कर रहा हूं?

+1

आप JSONP साथ हेडर को अनुकूलित नहीं कर सकते। Http://stackoverflow.com/questions/3073287/set-headers-with-jquery-ajax-and-jsonp –

+0

धन्यवाद .. मान लीजिए मुझे तब मिलना चाहिए या पोस्ट करना चाहिए। – Manu

उत्तर

4

मेरा मानना ​​है कि उत्तर है "हां, नियमित AJAX अनुरोधों के लिए आपको उचित लेख शीर्षलेख" सेट करने में सक्षम होना चाहिए।

हालांकि, जब आप JSONP (उदाहरण के आधार पर) का उपयोग करते हैं तो आप मानक XHR कॉल नहीं बना रहे हैं, जो "नहीं" का उत्तर बदलता है।

यदि आप JSONP का उपयोग कर फंस गए हैं, तो मुझे नहीं लगता कि आप कोई भी लेख शीर्षलेख भेज सकते हैं। JSONP बस कोणीय के $http.get उदाहरण के लिए के रूप में ही काम नहीं करता।

विवरण के लिए http://schock.net/articles/2013/02/05/how-jsonp-really-works-examples/ देखें, लेकिन लघु संस्करण जेएसओएनपी <script> टैग डालता है जो कुछ डेटा प्राप्त करता है। डेटा डेटा है कि सर्वर प्रदान करता है चारों ओर कॉल समारोह उपलब्ध कराने (JSON_CALLBACK अपने उदाहरण में) लौट आए। इस कारण से, आप शीर्ष लेख को बदल नहीं सकते - अनुरोध पर HTTP GET अनुरोध बिल्कुल के रूप में अगर आप अपने ब्राउज़र के स्थान बार में स्क्रिप्ट टैग के लिए URL चिपकाया था है।

1

जे जे ने इसे पूरी तरह उत्तर दिया।

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

उदाहरण के लिए, यूआरएल और व्यवस्थापक के रूप में स्थानीय होस्ट का उपयोग करते हुए: उपयोगकर्ता नाम के रूप रहस्य: पासवर्ड, परिवर्तन:

http://localhost:5000 

रहे हैं:

http://admin:[email protected]:5000 

नोट: @OliBlogger कि बताया गया है क्रोम का नवीनतम संस्करण अब इस सुविधा का समर्थन नहीं करता है। वास्तविक क्रोम स्थिति अद्यतन के लिंक के लिए अपनी टिप्पणी देखें।

+0

नीचे वोट क्यों? – eclipse1121

+0

एक ब्राउज़र के एड्रेस बार में इस की कोशिश की लेकिन यह केवल एक त्रुटि दे दी है। यह जेएस पुस्तकालय की एक विशेषता हो सकती है? हो सकता है कि डाउनवोट विनिर्देशों की कमी के साथ-साथ शायद सबसे अच्छा अभ्यास न हो, लेकिन यह जानने के लिए एक दिलचस्प विशेषता है। टिप्पणी के लिए – user1944491

+0

धन्यवाद। यहाँ [एक उदाहरण] है (http://i.imgur.com/l0os1pJ.png) आप यह कैसे धारी एपीआई, जो मूल प्रमाणीकरण का उपयोग करता है का उपयोग कर कर सकता है की। अनुरोध किया जा सकता है कि यूआरएल ने मूल एथ हेडर के साथ-साथ 401 अनधिकृत शीर्षलेख वापस करने की आवश्यकता है, लेकिन मुझे यकीन नहीं है कि – eclipse1121