मैं एक सेटअप शामिल है
फ्रंटेंड सर्वर (Node.js, डोमेन: लोकलहोस्ट: 3000) <---> बैकेंड (Django, अजाक्स, डोमेन: लोकलहोस्ट: 8000)
ब्राउज़र <- webapp <- Node.js (ऐप परोसें)
ब्राउज़र (वेबएप्प) -> अजाक्स -> डीजेंगो (ajax POST अनुरोध परोसें)
अब, मेरी समस्या यहाँ CORS सेटअप के साथ है जिसे वेबएप बैकएंड सर्वर पर अजाक्स कॉल करने के लिए उपयोग करता है। क्रोम में, मुझे मिलता रहता है
क्रेडेंशियल ध्वज सत्य होने पर Access-Control-Allow-Origin में वाइल्डकार्ड का उपयोग नहीं कर सकता।
फ़ायरफ़ॉक्स पर भी काम नहीं करता है।
मेरा Node.js सेटअप है:
var allowCrossDomain = function(req, res, next) {
res.header('Access-Control-Allow-Origin', 'http://localhost:8000/');
res.header('Access-Control-Allow-Credentials', true);
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
};
और Django में मैं इसके साथ इस मिडलवेयर का उपयोग कर रहा हूं
Webapp अनुरोध करता है जैसे:
$.ajax({
type: "POST",
url: 'http://localhost:8000/blah',
data: {},
xhrFields: {
withCredentials: true
},
crossDomain: true,
dataType: 'json',
success: successHandler
});
इसलिए, अनुरोध हेडर जो वेबप भेजता है वह दिखता है:
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: "Origin, X-Requested-With, Content-Type, Accept"
Access-Control-Allow-Methods: 'GET,PUT,POST,DELETE'
Content-Type: application/json
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Cookie: csrftoken=***; sessionid="***"
और यहाँ प्रतिक्रिया हैडर है:
Access-Control-Allow-Headers: Content-Type,*
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST,GET,OPTIONS,PUT,DELETE
Content-Type: application/json
मुझसे कहां गलती हो रही है?!
संपादित करें 1: मैं उपयोग कर रहा हूं chrome --disable-web-security
, लेकिन अब चीजों को वास्तव में काम करना चाहता हूं।
2 संपादित करें: उत्तर:
तो, मेरे लिए समाधान django-cors-headers
कॉन्फ़िगर:
CORS_ORIGIN_ALLOW_ALL = False
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_WHITELIST = (
'http://localhost:3000' # Here was the problem indeed and it has to be http://localhost:3000, not http://localhost:3000/
)
http
, यह /
अंत में है। मुझे लगता है कि http छूटना काम कर सकता है, लेकिन मैंने वास्तव में कुछ वर्षों तक इस सामान पर काम नहीं किया है, इसलिए वास्तव में नहीं पता कि अब क्या काम करता है!