मैं क्लाइंट पर jQuery (1.7.1) संचालित AJAX का उपयोग करके सरल क्रॉस-ओरिजिनल रिसोर्स शेयरिंग सेट अप करने की कोशिश कर रहा हूं और अपाचे ने पाइथन (डीजेंगो) सर्वर परोस दिया है। सभी निर्देशों के अनुसार मैंने पढ़ लिया है मेरी हेडर सही ढंग से स्थापित कर रहे हैं, लेकिन मैं निम्नलिखित त्रुटि मिलती रहती है:सही हेडर के बावजूद CORS एक्सेस-कंट्रोल-अनुमति-उत्पत्ति
XMLHttpRequest cannot load http://myexternaldomain.com/get_data . Origin http://localhost:8080 is not allowed by Access-Control-Allow-Origin.
हैडर जा रहा है मैं कोशिश कर रहा हूँ (मुझे यकीन है कि यह और भी ब्राउज़र अतीत हो रही है नहीं कर रहा हूँ) भेज है:
Request URL:http://myexternaldomain.com/get_data
Accept:application/json, text/javascript, */*; q=0.01
Origin:http://localhost:8080
Referer:http://localhost:8080/static/js/test-zetta.html
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.66 Safari/535.11
जावास्क्रिप्ट कोड origin
ठीक से सेट है
var request = $.ajax({
url : "http://myexternaldomain.com/get_data",
type : "POST",
dataType : "json",
crossDomain : true
});
ध्यान दें कि है। सर्वर ने निम्न अजगर कोड
def process_response(self, response):
if response.has_header('Access-Control-Allow-Origin'):
return response
response['Access-Control-Allow-Origin'] = '*'
return response
def get_orders(request):
""" Tell worker what to do """
response_data = {}
response_data['action'] = 'probe'
response = process_response(HttpResponse(json.dumps(response_data), mimetype="application/json"))
return response
अगर मैं पता सीधे जाएं, यह पुष्टि करने के लिए शीर्ष लेख सही ढंग से क्रॉस-डोमेन में सेट किया जा रहा है कि
Access-Control-Allow-Origin:*
Content-Type:application/json
Date:Thu, 08 Mar 2012 05:06:25 GMT
Server:Apache/2.2.20 (Ubuntu)
Transfer-Encoding:chunked
हालांकि यह स्थापित करने के लिए प्रकट होता है का उपयोग करते हुए शीर्ष लेख Access-Control-Allow-Origin = *
कहते हैं हमेशा विफल रहता है (क्रोम और फ़ायरफ़ॉक्स दोनों की कोशिश की)। मैं this सवाल का वास्तव में चयनित जवाब के अनुसार कोड को लागू करने की कोशिश की है, लेकिन एक ही त्रुटि मिलती है
अद्यतन
मैं काफी यकीन है कि समस्या सर्वर साइड है कर रहा हूँ के रूप में मैं पाने में कामयाब रहे है मेरे AJAX कॉल एक अलग सार्वजनिक CORS सक्षम सर्वर के साथ काम कर कॉल। जब मैं इस सार्वजनिक सर्वर से वापस आने वाले शीर्षकों की तुलना करता हूं, और मेरे द्वारा लौटाए गए (जब मैं एक ही डोमेन से परीक्षण करता हूं), तो मुझे कोई बड़ा अंतर नहीं दिखाई दे सकता है जो अंतर के लिए खाता हो सकता है (नीचे देखें)।
एक सूक्ष्मता जिसे मैंने बाहर रखा है, जो महत्वपूर्ण हो सकता है या हो सकता है कि वास्तविक डोमेन एकाधिक सबडोमेन का एक अमेज़ॅन डोमेन है। वास्तविक पताhttp://ec2-23-20-27-108.compute-1.amazonaws.com/get_orders है, यह देखने के लिए स्वतंत्र महसूस करें कि मैं क्या गलत कर रहा हूं।
सार्वजनिक सर्वर
Access-Control-Allow-Origin:*
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:622
Content-Type:text/html
Date:Thu, 08 Mar 2012 15:33:20 GMT
Keep-Alive:timeout=15, max=99
Server:Apache/2.2.14 (Ubuntu)
Vary:Accept-Encoding
X-Powered-By:Perl/5.8.7, PHP/4.4.0
अपने सर्वर से से -
Access-Control-Allow-Origin:*
Content-Encoding:gzip
Content-Type:text/plain
Date:Thu, 08 Mar 2012 15:32:24 GMT
Server:Apache/2.2.20 (Ubuntu)
Transfer-Encoding:chunked
Vary:Accept-Encoding
मैंने अतीत में, जेसन डेटा के लिए सीओआरएस सक्षम करने और कभी सफल नहीं होने की कोशिश की है। सीओआरएस इस तरह flaky हो सकता है। आप बस JSON-P लौटने से बेहतर होगा। – xbonez
आप केवल अपने रिमोट सर्वर और स्थानीय क्लाइंट के बीच _final_ विनिमय से शीर्षलेख पोस्ट कर रहे हैं। यदि आप पूर्ण एक्सचेंज देखते हैं, तो मुझे यकीन है कि आपको एक प्रतिक्रिया के साथ एक विकल्प अनुरोध दिखाई देगा जिसमें एक्सेस-कंट्रोल-स्वीट-मेथड और एक्सेस-कंट्रोल-स्वीट-हेडर हेडर शामिल हैं। –