2016-02-09 9 views
5

मैं जावा में एक बहुत ही सरल JSON API बना रहा हूं। यह वास्तव में एक परियोजना ज़ोंबॉइड मोड है जो ऑब्जेक्ट निर्देशांक प्रदान करता है। यह कैसे मेरे HTTP हैंडलर की तरह लग रहा है:सीओआरएस हेडर 'एक्सेस-कंट्रोल-ऑब्जेक्ट-ओरिजिन' मेल नहीं खाता है ... लेकिन यह करता है!

public class JSONZomboid implements HttpHandler 
{ 
    @Override 
    public void handle(HttpExchange t) throws IOException { 
     // HEADERS 
     Headers headers = t.getResponseHeaders(); 
     headers.set("Content-Type", "text/json"); 
     headers.set("Access-Control-Allow-Origin", "pzmap.crash-override.net");     
     t.sendResponseHeaders(200,0); 
     //BODY 
     OutputStream os = t.getResponseBody(); 
     os.write("{\n".getBytes()); 
      // generate JSON here 
     os.write("}".getBytes()); 
     os.close(); 
    } 
} 

मैं परियोजना Zomboid नक्शा userscript जिसका मतलब है मैं कनेक्ट करने के लिए CORS सक्षम करने की आवश्यकता का उपयोग कर परियोजना में इस लोड करना चाहते हैं। यह सरल कोड के माध्यम से किया जाता है:

PlayerRenderer.prototype.fetchInfo = function() { 
    $.get("http://127.0.0.1:8000/test", {}, this.displayPoints.bind(this)); 
} 

लेकिन मैं इस त्रुटि मिलती है:

warning http://images.michaelsync.net/images/2007/09/warningicon.png Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://127.0.0.1:8000/test . (Reason: CORS header 'Access-Control-Allow-Origin' does not match 'pzmap.crash-override.net').

यहां तक ​​कि कंसोल में मैं स्पष्ट रूप से देख सकते हैं त्रुटि भ्रामक है:

image description

हैं मैं पहले से ही कॉरस से नफरत नहीं करता था, मैं अब इसे नफरत करना शुरू कर दूंगा। क्या आप कृपया मुझे बता सकते हैं कि असली स्ट्रिंग क्या है जो मूल हेडर की अनुमति देता है?

+2

शीर्षलेख में उस साइट का होस्टनाम होना चाहिए जिसकी सामग्री तक पहुंच की अनुमति है। यदि आप अपने पृष्ठों को 'pzmap.crash-override.net' पर होस्ट की गई साइट से लोड कर रहे हैं तो इसे काम करना चाहिए। त्रुटि आपको बता रही है कि हेडर में क्या है, स्रोत डोमेन क्या नहीं था। – Pointy

+1

आप देख सकते हैं कि मैं कौन सी साइट लोड हेडर ('उत्पत्ति' और' रेफरर') से लोड कर रहा हूं। –

+0

असल में उन छवियों में थोड़ी सी स्क्रीन पर विस्तार देखना बहुत मुश्किल है:/ – Pointy

उत्तर

1

उपरोक्त टिप्पणी # 1 सही है: सीओआरएस को क्लाइंट का मूल अनुरोध (अंत तक एसएसएल अनुभव के लिए) से मेल खाने के लिए एक्सेस-कंट्रोल-अनुमति-उत्पत्ति हेडर की आवश्यकता होती है। तो इस मामले में, सुनिश्चित करें कि आप अपने एक्सेस-कंट्रोल-ऑब्जेक्ट-हेडर हेडर में pzmap.crash-override.net सेट करें।

दो टिप्पणियां:

1- आपके द्वारा ऑनलाइन पढ़ सकते हैं के बावजूद, nginx वर्तमान में अलग लाइनों के रूप में सूचीबद्ध होने के लिए कई प्रविष्टियाँ, एक ला की आवश्यकता है: add_header पहुंच-नियंत्रण-अनुमति दें-उत्पत्ति "https://developers.google.com"; add_header एक्सेस-कंट्रोल-अनुमति-उत्पत्ति "https://imasdk.googleapis.com";

2 - इसके अलावा आप ऑनलाइन क्या पढ़ सकते हैं इसके बावजूद, वाइल्डकार्ड का उपयोग ठीक नहीं है। सभी क्लाइंट (अर्थात् ब्राउज़र) इसे अनुमति नहीं देते हैं।

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

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