2011-06-11 17 views
15

मैं नोडजेस का उपयोग कर इवेंटसोर्स सर्वर बनाने की कोशिश कर रहा हूं, जो सर्वर क्रॉस डोमेन का अनुरोध करेगा। मैं वापस एक्सेस-कंट्रोल-अनुमति-उत्पत्ति हेडर भेज रहा हूं, लेकिन ब्राउजर (न ही क्रोम या ओपेरा) ने मुझे कनेक्ट करने दिया। ऐसे शीर्षलेख हैं जिन्हें मैं वापस भेजता हूं:क्रॉस डोमेन इवेंट स्रोत

this._response.writeHead(200, { 
    'Content-Type': 'text/event-stream', 
    'Cache-Control': 'no-cache', 
    'Connection': 'keep-alive', 
    'Access-Control-Allow-Origin': '*', 
    'Access-Control-Allow-Credentials': 'true' 
}); 

मैं इसे सही तरीके से कैसे कर सकता हूं?

सादर

+0

ओपेरा [सीओआरएस] (http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing) का समर्थन नहीं करता है। – yojimbo87

+1

शायद, लेकिन क्रोम सीओआरएस का समर्थन करता है, और मुझे अभी भी सुरक्षा अपवाद (सुरक्षा_ईआरआर: डीओएम अपवाद 18) मिलता है। मेरा मानना ​​है कि एक हैक होना चाहिए, जैसे कि एक्सएचआर के लिए एक्सेस-कंट्रोल-इट-ऑरिजन, लेकिन मुझे बस यह नहीं मिला। –

+1

हालांकि http://www.w3.org/TR/cors/ में एक सेक्शन है जो दिखाता है कि इसका उपयोग एसएसई के साथ कैसे किया जा सकता है, ऐसा लगता है कि ब्राउज़र ने इसे अभी अनदेखा किया है और फिलहाल सीओआरएस + एसएसई के लिए कोई समर्थन नहीं है। – Evgeny

उत्तर

4

देख https://github.com/Yaffle/EventSource - polyfill की अनुमति दें पहचान के साथ की अनुमति देने के मूल करने के लिए सेट * नहीं किया जा सकता फ़ायरफ़ॉक्स, वेबकिट और IE 8+

3

के लिए CORS समर्थन करने के लिए अपनाया जा सकता है। आपकी प्रतिक्रिया में प्राप्त उत्पत्ति-शीर्षलेख लिखने पर विचार करें

2

आपके स्थान पर निम्न ब्लॉक आज़माएं। ब्राउज़र OPTIONS के साथ एक बार कॉल करेगा और उसके बाद अनुरोध उसके बाद अपेक्षित किया जाएगा।

यदि आप अनुरोध तरीकों बाहर हड्डी टूट गई है if बयान की जरूरत नहीं होगी - लेकिन मैं आपको एक पूरा ब्लॉक सिर्फ मामले में आप इसे नमस्ते विश्व उदाहरण की तरह होस्ट कर रहे हैं किया था देना चाहता था।

if (req.method === "OPTIONS") { 
    console.log('!OPTIONS'); 
    var headers = {}; 
    // IE8 does not allow domains to be specified, just the * 
    // headers["Access-Control-Allow-Origin"] = req.headers.origin; 
    headers["Access-Control-Allow-Origin"] = "*"; 
    headers["Access-Control-Allow-Methods"] = "POST, GET, PUT, DELETE, OPTIONS"; 
    headers["Access-Control-Allow-Credentials"] = false; 
    headers["Access-Control-Max-Age"] = '86400'; // 24 hours 
    headers["Access-Control-Allow-Headers"] = "X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept"; 
    res.writeHead(200, headers); 
    res.end(); 
} 
1

यदि आप क्रॉस डोमेन संसाधनों का उपयोग कर रहे हैं तो आपको Security Exception (SECURITY_ERR: DOM Exception 18) मिलते हैं। यह हो सकता है की वजह से:

  1. किसी अन्य सर्वर कि CORS की अनुमति नहीं है या
  2. हो सकता है आप से या
  3. (स्थानीय फ़ाइलों नोड सर्वर के माध्यम से प्रस्तुत नहीं) उन संसाधनों तक पहुंच की कोशिश कर रहा file:// के माध्यम से स्थानीय संसाधनों का उपयोग करने की कोशिश कर रहा आपके नोड सर्वर से प्रदत्त यूआरएल की बजाय स्थानीय फाइल से पृष्ठ का परीक्षण कर रहे हैं।
संबंधित मुद्दे