2016-04-01 10 views
21

के लिए पूछते समय कोणीय 2 विकल्प विधि भेजी गईं, मैं अपने कोणीय 2 ऐप में basic authentification जोड़ने की कोशिश कर रहा हूं।http.GET

public login() { 
    // Set basic auth headers 
    this.defaultHeaders.set('Authorization', 'Basic ' + btoa(this.username + ':' + this.password)); 

    console.log('username', this.username) 
    console.log('password', this.password) 
    console.log(this.defaultHeaders) 

    // rest is copy paste from monbanquetapiservice 
    const path = this.basePath + '/api/v1/development/order';   

    let req = this.http.get(path, { headers: this.defaultHeaders }); 
    req.subscribe(
     _ => { }, 
     err => this.onError(err) 
    ); 
} 

क्या मैं देखने की उम्मीद Authorization हैडर मैं डाल एक GET अनुरोध है। के बाद से अपने सर्वर इस यूआरएल पर विकल्प, मैं कोई त्रुटि मिलती है की अनुमति नहीं है

OPTIONS /api/v1/development/order HTTP/1.1 
Host: localhost:8080 
Connection: keep-alive 
Access-Control-Request-Method: GET 
Origin: http://localhost:3000 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36 
Access-Control-Request-Headers: authorization, content-type 
Accept: */* 
Referer: http://localhost:3000/ 
Accept-Encoding: gzip, deflate, sdch 
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6,fr;q=0.4 

:

लेकिन क्या मैं देख रहा हूँ पहली बार एक विकल्प इस हेडर के साथ है।

मुझे पता है कि PUT या POST जैसी कुछ विधियां अनुरोध को पूर्ववत करने के लिए पहले एक विकल्प विधि भेजती हैं, लेकिन प्राप्त नहीं होती हैं।

कोणीय 2 का http पहले विकल्प क्यों भेजता है?

धन्यवाद।

+0

http://stackoverflow.com/questions/1256593/why-am- के एक dup तरह लग रहा है:

अधिक जानकारी के लिए आप इस लेख पर एक नज़र हो सकता था i-getting-an-options-request-its-a-get-request –

+0

यह https://stackoverflow.com/questions/12111936/angularjs-performs-an-options-http-request-for के लिए पर्याप्त है -ए-क्रॉस-उत्पत्ति-संसाधन –

उत्तर

49

सीओआरएस काम करता है (क्रॉस डोमेन अनुरोधों का उपयोग करते समय)। सीओआरएस के साथ, रिमोट वेब एप्लिकेशन (यहां डोमेन mydomain.org वाला एक) चुनता है अगर अनुरोध किया जा सकता है तो विशिष्ट हेडर के सेट के लिए धन्यवाद।

  • सरल अनुरोध:

    CORS विनिर्देश दो अलग-अलग उपयोग के मामलों अलग करता है। यदि हम HTTP GET, HEAD और POST विधियों का उपयोग करते हैं तो यह उपयोग लागू होता है। POST विधियों के मामले में, निम्न मानों के साथ केवल सामग्री प्रकार समर्थित हैं: टेक्स्ट/सादा, एप्लिकेशन/एक्स-www-form-urlencoded और multipart/form-data।

  • प्रीफलाइट किए गए अनुरोध।जब 'सरल अनुरोध' उपयोग केस लागू नहीं होता है, तो क्रॉस-डोमेन अनुरोधों के संदर्भ में क्या किया जा सकता है, यह जांचने के लिए पहला अनुरोध (HTTP विकल्प विधि के साथ) किया जाता है।

यह कोणीय 2 नहीं है जो विकल्प अनुरोध भेजता है लेकिन ब्राउज़र स्वयं ही भेजता है। यह कोणीय से संबंधित कुछ नहीं है।

+2

मैं एक 'GET' अनुरोध भेज रहा हूं, लेकिन मेरे पास अभी भी यह प्रीफलाइट है। मुझे पुट के लिए प्रीफलाइट और कभी-कभी POST विधियों के बारे में पता है, लेकिन जीईटी नहीं होना चाहिए। यही कारण है कि मैंने सोचा कि यह कुछ कोणीय चीज थी जिसने इस विकल्प को प्रीफलाइट – amaurymartiny

+5

जोड़ा था, मुझे लगता है कि यह 'प्राधिकरण' हेडर की वजह से है ... इसके कारण, आप प्रीफलाइट अनुरोध के मामले में हैं और एक साधारण अनुरोध नहीं है। –

+1

असल में, यह तब होता है जब आपके पास कस्टम हेडर होता है (ब्राउजर द्वारा हुड के नीचे भेजा गया कुछ नहीं) ... –

4

Why am I getting an OPTIONS request instead of a GET request?

एक CORS preflight अनुरोध है कि ब्राउज़र से ही उत्पन्न किया जाता है यही कारण है कि।

भी देखें
- How to disable OPTIONS request?

सर्वर CORS अनुरोध, उसके बाद ही वास्तविक GET अनुरोध OPTIONS अनुरोध के बाद ब्राउज़र द्वारा भेजा जाता है का समर्थन करने के लिए कॉन्फ़िगर किया जाना चाहिए।

भी देखें
- "No 'Access-Control-Allow-Origin' header is present on the requested resource" - https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

पहुंच-नियंत्रण-अनुमति दें-क्रेडेंशियल

बताता है कि क्या है या नहीं अनुरोध के जवाब अवगत कराया जा सकता है जब साख झंडा सच है । जब प्रीफलाइट अनुरोध के जवाब के हिस्से के रूप में उपयोग किया जाता है, तो यह इंगित करता है कि प्रमाण पत्र का उपयोग करके वास्तविक अनुरोध किया जा सकता है या नहीं। ध्यान दें कि सरल जीईटी अनुरोध प्रीफलाइट नहीं किए गए हैं, और इसलिए यदि प्रमाण पत्र वाले संसाधन के लिए अनुरोध किया गया है, यदि यह हेडर संसाधन के साथ वापस नहीं किया गया है, तो प्रतिक्रिया ब्राउज़र द्वारा अनदेखा की जाती है और वेब सामग्री पर वापस नहीं आती है।

+0

अच्छा जवाब, लेकिन कुछ अजीब हुआ, जब मैं GitHub.com एपीआई को HTTP अनुरोध जारी करता हूं, तो कोई प्रीफलाइट अनुरोध नहीं होता है, लेकिन जब मैं इसे अपने स्वयं के सेवा एपीआई के साथ करता हूं, सभी अनुरोधों के प्रीफलाइट अनुरोध है! क्या आप जानते हैं कि क्या कारण है? – M98

+0

गिटहब शायद प्रतिक्रिया में अपेक्षित शीर्षलेख प्रदान करता है, जबकि आपकी सेवा API नहीं करता है। –

+0

हां, यह संभव है। लेकिन क्रोम कैसे जानता है? कम से कम – M98

संबंधित मुद्दे