2016-03-05 9 views
6

के बाद बंद हो जाता है मेरे पास फ़ायरफ़ॉक्स 44.0.2 ब्राउज़र में http://localhost:3000 पर चल रहा एक एस्मिथस्क्रिप्ट 7 ब्राउज़र एप्लिकेशन है। यह https://localdev.net:8443 पर चल रहे बीगो 1.6.0 सर्वर पर पोस्ट कर रहा है। 'Localdev.net' एक ही बॉक्स पर है और स्थानीयहोस्ट पते पर हल करता है। ब्राउज़र कोड है:फ़ायरफ़ॉक्स से बीगो सर्वर तक सीओआरएस प्राप्त करता है प्री-फ्लाइट

var serverURL = 'https://localdev.net:8443/v1/user/login' 
fetch(serverURL, { 
    method: 'post', 
    headers: { 
    'Accept': 'application/json', 
    'Content-Type': 'application/json' 
    }, 
    mode: 'cors', 
    cache: 'default', 
    body: JSON.stringify({username: this.state.username, password: this.state.password}) 
}) 
.then(function(response){ 
    if (response.status >= 200 && response.status < 300) { 
    return Promise.resolve(response) 
    } 
    return Promise.reject(new Error(response.statusText)) 
}) 
.then(function(data){ 
    console.log('data: ' + data) 
}) 
.catch((err) => console.error(serverURL, err.toString())) 

}

beego सर्वर CORS अनुरोधों को हैंडल करने के रूप में निम्नानुसार कॉन्फ़िगर किया गया है:

beego.InsertFilter("*", beego.BeforeRouter, cors.Allow(&cors.Options{ 
    AllowOrigins:  []string{"*"}, 
    AllowMethods:  []string{"*"}, 
    AllowHeaders:  []string{"Origin"}, 
    ExposeHeaders: []string{"Content-Length"}, 
    AllowCredentials: true, 
})) 

Wireshark ग्राहक एक पूर्व उड़ान CORS विकल्पों को अनुरोध भेज रहा देखता है सर्वर:

OPTIONS /v1/user/login HTTP/1.1\r\n 
Host: localdev.imaginout.net:8443\r\n 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:44.0) Gecko/20100101 Firefox/44.0\r\n 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n 
Accept-Language: en-US,en;q=0.5\r\n 
Accept-Encoding: gzip, deflate, br\r\n 
Access-Control-Request-Method: POST\r\n 
Access-Control-Request-Headers: content-type\r\n 
Origin: http://localhost:3000\r\n 
Connection: keep-alive\r\n 

जवाब में, बीगो सर्वर आउटपुट:

2016/03/05 12:54:29 [router.go:828][D] | OPTIONS | /v1/user/login       | 102.08µs   | not match | 

हालांकि सर्वर कहते हैं 'से मेल नहीं', wireshark एक प्रतिक्रिया रिकॉर्ड:

HTTP/1.1 200 OK\r\n 
Access-Control-Allow-Credentials: true\r\n 
Access-Control-Allow-Origin: http://localhost:3000\r\n 
Access-Control-Expose-Headers: Content-Length\r\n 
Server: beegoServer:1.6.0\r\n 
Date: Sat, 05 Mar 2016 17:54:29 GMT\r\n 
Content-Length: 0\r\n 
Content-Type: text/plain; charset=utf-8\r\n 
मेरे लिए

, एक पहुंच-नियंत्रण-अनुमति दें-उत्पत्ति के साथ 200 स्थिति ब्राउज़र एप्लिकेशन के डोमेन पर सेट इंगित करता है कि CORS उड़ान-पूर्व सफल रहा, लेकिन फ़ायरफ़ॉक्स डेवलपर कंसोल पता चलता है:

"https://localdev.net:8443/v1/user/login" TypeError: NetworkError when attempting to fetch resource. 

तो ऐप और/या फ़ायरफ़ॉक्स अनुरोध विफल लगता है लगता है। Wireshark दिखाता है कि ऐप सर्वर को एक और अनुरोध नहीं भेजता है। मुझे एक पोस्ट की उम्मीद है।

वहां सीओआरएस के बारे में बहुत सारे प्रश्न हैं, लेकिन ब्राउज़र/एपीआई/सर्वर अत्यधिक परिवर्तनीय हैं इसलिए मुझे सटीक मिलान नहीं मिला है। इसमें खोदना, लेकिन किसी भी मदद की सराहना की जाएगी।

+0

क्रोम से अनुरोध चलाने का प्रयास किया और यह डेवलपर कंसोल में एक अतिरिक्त त्रुटि देता है: "अनुरोध हेडर फ़ील्ड सामग्री-प्रकार को प्री-लाइट प्रतिक्रिया में एक्सेस-कंट्रोल-स्वीकृति-हेडर द्वारा अनुमति नहीं है।" इस त्रुटि के बाद यह "टाइप एरर: लाने में विफल" प्रिंट करता है। –

+0

Beego कॉन्फ़िगरेशन में हेडर्स को "मूल, सामग्री-प्रकार" पर सेट करें, लेकिन फिर भी वही त्रुटि प्राप्त करें। बीगो द्वारा भेजी गई पूर्व-उड़ान प्रतिक्रिया में 'उत्पत्ति, सामग्री-प्रकार' पर सेट एक्सेस-कंट्रोल-स्वीकृति-हेडर शामिल नहीं हैं। मुझे संदेह है कि इसे चाहिए। –

उत्तर

3

फिक्स्ड। Beego CORS विकल्पों में [] मूल "," सामग्री-प्रकार "} स्ट्रिंग-कंट्रोल-स्वीकृति-हेडर सेट करने की आवश्यकता है। फिर एक्सेस-कंट्रोल-स्वीकृति-हेडर ठीक से सेट हो जाते हैं और प्री-फ्लाइट सफल होती है। इसके बाद मुख्य पोस्ट सफल हो गया।

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