2012-12-27 12 views
6

प्रदान करने वाले सर्वर के साथ DOM अपवाद 18 मैं सर्वर प्रेषित ईवेंट (एसएसई) प्रदान करता है जो सर्वर से ब्राउज़र कनेक्ट करने का प्रयास कर रहा हूं। इस सर्वर के मूल की तुलना में एक अलग डोमेन है। उदाहरण के लिए यदि आप http://d1.example.com/page पर कॉल करते हैं तो यह पृष्ठ http://d2.example.com/subscribe पर एक एसएसई चैनल से कनेक्ट करने का प्रयास करेगा। लाइन परएसएसई असहज त्रुटि: SECURITY_ERR: सर्वर प्रेषित ईवेंट (एसएसई)

Uncaught Error: SECURITY_ERR: DOM Exception 18

: करने के लिए कि निम्न त्रुटि संकेत देगा कोशिश कर रहा

var source = new EventSource("http://d2.example.com/subscribe")

मुझे लगता है कि कैसे तय कर सकते हैं?

अद्यतन (समाधान है कि मैं बाहर की कोशिश की है):

1- CORS

मैं अपने वेब सेवा d2.example.com के हेडर को Access-Control-Allow-Origin:* जोड़कर CORS की कोशिश की। यह EventSource समस्या हल नहीं किया गया है, भले ही $.get("http://d2.example.com")d1.example.com पृष्ठों से कॉल अभी ठीक काम कर रहे हैं! मैंने सोचा कि एसएसई सामान्य HTTP अनुरोधों पर काम करता है, तो यह क्रोम पर क्यों काम नहीं कर रहा है?

2 पुन: निर्देशित

मैं httpd सर्वर का उपयोग कर रहा है, इसलिए मैं d1.example.com वर्चुअल होस्ट कि d2.example.com करने SSE अनुरोध गुजरता में एक रीडायरेक्ट नियम बनाया। यह फ़ायरफ़ॉक्स के साथ पूरी तरह से काम किया। दूसरी तरफ क्रोम ने कोई त्रुटि नहीं दी और एसएसई सर्वर से कनेक्ट नहीं किया। ऐसा लगता है कि यह पूरे EventSource कमांड को छोड़ दिया गया। यह, इस समाधान कभी काम नहीं करेगा की तरह लग रहा इतने पर स्थानांतरित करने देता है ...

3 रिवर्स प्रॉक्सी

दोनों d1.example.com/subscribe पर जुड़ा हुआ जो मूल रूप से रिवर्स प्रॉक्सी के माध्यम से d2.example.com से जुड़ रहा है ब्राउज़रों। लेकिन on_close ईवेंट कभी पकड़ा नहीं जाता है, भले ही ब्राउजर बंद हो। जो समझ में आता है क्योंकि डी 2 सर्वर अब प्रॉक्सी सर्वर के साथ चैनल बना रहा है। मैं प्रॉक्सी सर्वर से d2 तक on_close ईवेंट कैसे अग्रेषित कर सकता हूं?

क्या कोई अलग तरीका है जो इस काम को कर सकता है?

+0

@Jack यह वही सवाल नहीं है। इस प्रश्न को फ़ाइल की आवश्यकता नहीं है। एक फ़ाइल काफी आसान है आप एक रीडायरेक्ट नियम को सबसे खराब केस परिदृश्य या रिवर्स प्रॉक्सी के रूप में बना सकते हैं। एसएसई उन समाधानों से काम नहीं करेगा। – wael34218

उत्तर

4

बाधाएं उच्च हैं यह क्रॉस-मूल संसाधन साझाकरण का एक मुद्दा है, जिसे आपको प्रासंगिक डोमेन पर सक्षम करना होगा।

http://enable-cors.org/

MDN के रूप में कहते हैं:

Note: Although it's not yet part of the standard, EventSource supports CORS in Firefox 11 and later. This is expected to become standard soon.

+0

यह काम नहीं कर रहा है। 'एक्सेस-कंट्रोल-अनुमति-उत्पत्ति: d2.example.com' अब प्रतिक्रिया शीर्षलेख में दिखा रहा है। फिर भी 'EventSource ("http://d2.example.com/subscribe") अभी भी एक ही त्रुटि उत्पन्न करता है। मैं क्रोम – wael34218

+0

का उपयोग कर रहा हूं यह फ़ायरफ़ॉक्स पर काम कर रहा है लेकिन क्रोम – wael34218

+4

पर नहीं 1) CORS + EventSource अब स्टैंडअर्ट का हिस्सा है; 2) सीओआरएस + इवेंटसोर्स एफएफ 11+, ओपेरा 12+ में समर्थित है, और क्रोम 25 में होगा; 3) आप इन्ससोर्स – 4esn0k

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