2014-10-07 23 views
14

एक डीएनएन सेवा फ्रेमवर्क वेबएपीआई बनाने की कोशिश कर रहा है लेकिन मुझे इसे कोरस के साथ लेने में परेशानी हो रही है। मेरे पास सभी उपयुक्त शीर्षलेख हैं (मुझे लगता है) लेकिन यह अभी भी काम नहीं कर रहा है।अजाक्स अनुरोध हेडर फ़ील्ड कुंजी को एक्सेस-कंट्रोल-स्वीट-हेडर

त्रुटि:

अनुरोध हेडर:

Remote Address: 127.0.0.1:80 
URL: http://www.dnndev.me/mysite/builder/API/echo?message=Hello 
Request Method: OPTIONS 
Status Code: 200 OK 
Accept: */* 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: en-US,en;q=0.8 
Access-Control-Request-Headers: accept, key 
Access-Control-Request-Method: GET 
Connection: keep-alive 
Host: www.dnndev.me 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36 

प्रतिक्रिया हेडर:

Access-Control-All-Headers: Origin, X-Requested-With, Content-Type, Accept, Key 
Access-Control-Allow-Methods: * 
Access-Control-Allow-Origin: * 
Cache-Control: no-cache 
Content-Length: 13 
Content-Type: application/json; charset=utf-8 
Date: Tue, 07 Oct 2014 18:49:10 GMT 
Expires: -1 
Pragma: no-cache 
Server: Microsoft-IIS/7.5 

आम तौर पर, इस त्रुटि 'Access- में उचित हेडर नहीं होने की वजह से हो जाएगा नियंत्रण-सभी शीर्षकों '। हालांकि, मैं AJAX को इसके अनुरोध के साथ जारी रखने की अनुमति देने के लिए सही प्रतिक्रिया भेज रहा हूं। यह बस मना कर देता है।

यहाँ विधि करने के लिए अपने ajax कॉल है:

$.ajax({ 
    type: 'GET', 
    url: 'http://www.dnndev.me/mysite/builder/API/echo', 
    dataType: 'json', 
    data: { message: 'Hello' }, 
    crossDomain: true, 
    headers: { 'Key': 'Bearer 7680ff6e-1362-4236-a9cd-c6bc8b6f13ea' }, 
    success: function (result) { console.log(result); } 
}); 

शायद स्पष्ट है, लेकिन यह केवल क्रॉस-डोमेन अनुरोध और केवल जब मैं कस्टम हेडर में शामिल हैं (इसलिए ajax procing एक विकल्प करने के लिए) पर होता है।

उत्तर

21

आपके सर्वर preflight अनुरोध के लिए निम्न कस्टम हेडर के साथ प्रतिक्रिया:

Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key 
:

Access-Control-All-Headers: Origin, X-Requested-With, Content-Type, Accept, Key 

यदि आप (या जो व्यक्ति इस सर्वर लिखा था) CORS के बारे में ध्यान से पढ़ें वह के साथ जवाब दिया जाना चाहिए था, जबकि

अब क्लाइंट क्लाइंट आगे बढ़ सकता है और Key कस्टम हेडर का उपयोग कर सकता है।

यह कहा जा रहा है कि, Bearer OAuth 2 के लिए काफी विशिष्ट है जो Authorization शीर्षलेख में भेजा जाता है। Key का उपयोग आरएफसी और सामान और एक व्हील पुनर्वित्त के प्रकार का भयानक उल्लंघन जैसा लगता है।

+0

धन्यवाद! मैंने कभी यह नहीं देखा होगा। छोटी चीजें ... – NorianNyx

+0

बेयरर का उपयोग करना एक पुराना विचार है जहां मैं OAuth 2 का उपयोग कर रहा था। मैंने अभी तक हेडर नहीं बदला है। – NorianNyx

2

कृपया Nyx के प्रश्न और डारिन के उत्तर ('ओ' गायब) में टाइपो नोट करें। तो यह

Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key 

है और यह त्रुटि संदेश का समाधान करता है 'अनुरोध हेडर फ़ील्ड कुछ हेडर मैदान पहुंच-नियंत्रण-अनुमति दें-हेडर preflight मोड में से अनुमति नहीं है', अगर ब्राउज़र की के जवाब के रूप भेजा विकल्प अनुरोध

1

अपने सर्वर प्रतिक्रिया हेडर को यह करें:

हैडर ('पहुंच-नियंत्रण-अनुमति दें-हेडर: उत्पत्ति, सामग्री प्रकार, एक्स प्रमाणीकरण-टोकन, प्राधिकरण');

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