मैशअप समान-ऑर्गिन नीति के साथ कैसे काम करते हैं?


11

यदि जावास्क्रिप्ट को केवल उसी डोमेन से स्क्रिप्ट तक पहुंचने की अनुमति है, तो एक वेबसाइट कैसे मैशअप बना सकती है जिसे किसी अन्य डोमेन से सामग्री को पढ़ना और संशोधित करना होगा?

जवाबों:


7

क्रॉस-ब्राउज़र समाधान

JSONP

अगर आप जिस एपीआई को एक्सेस करने की कोशिश कर रहे हैं वह JSONP को सपोर्ट करता है , तो आपको केवल आपके अनुरोध में एक जावास्क्रिप्ट फ़ंक्शन नाम प्रदान करना होगा, फिर JSONP जावास्क्रिप्ट प्रदान करता है, जैसे myfunc({the:data});आप एक नियमित जावास्क्रिप्ट की तरह चला सकते हैं, यही वजह है कि आप एक नया <script src="www.website.com/somecall?jsonp=myfunc">टैग बनाएंगे "एक अनुरोध भेजें" (यदि आप अनुरोधों type: jsonpमें उपयोग करते हैं तो jQuery स्वचालित रूप से ऐसा करता है $.ajax)।

नकारात्मक पक्ष यह है कि यह JSONP का समर्थन करने के लिए एपीआई के प्रदाता की आवश्यकता है।

Chamak

फ्लैश तब तक क्रॉस-डोमेन सामग्री तक पहुंच सकता है जब तक कि लक्ष्य वेबसाइट की crossdomain.xmlजड़ में एक फ़ाइल होती है जो कहती है कि यह इसकी अनुमति देता है, जो आमतौर पर सर्वर पर एक एपीआई प्रदान करता है)।

नकारात्मक पक्ष यह है कि इसके लिए उपयोगकर्ता के ब्राउज़र में फ्लैश की आवश्यकता होती है और आपको जिस वेबसाइट से डेटा मिलता है, उसके पास क्रॉसडोमेन.एक्सएमएल होना चाहिए जो क्रॉस-डोमेन अनुरोधों की अनुमति देता है।

एक ही डोमेन नाम पर सर्वर-साइड स्क्रिप्ट

PHP जैसी सर्वर-साइड भाषाओं में कोई बीएस-डोमेन प्रतिबंध नहीं है, इसलिए आपके पास एक स्क्रिप्ट हो सकती है जो प्रॉक्सी के रूप में कार्य करती है (उदाहरण के लिए http एक्सटेंशन के माध्यम से डाउनलोड करें जैसे कि cURL)।

अतिरिक्त लाभ यह है कि आप सर्वर पर डेटा (या यहां तक ​​कि मैशअप कई स्रोतों) को साफ कर सकते हैं, इसे अपने वेबपेज / जावास्क्रिप्ट पर अग्रेषित करने से पहले, ताकि आप डेटा का केवल उपयोगी हिस्सा भी निकाल सकें, जो मोबाइल वेबएप के दौरान अच्छा है जहां बैंडविड्थ एक मुद्दा हो सकता है।

नकारात्मक पक्ष यह है कि सभी अनुरोधों को आपके सर्वर के माध्यम से जाना है, जिससे आपके सर्वर पर लोड बढ़ जाता है।

हालांकि लाभ यह है कि यह किसी भी स्रोत के साथ काम करेगा क्योंकि इसे क्रॉसडोमेन या जोंसप का समर्थन करने के लिए लक्ष्य की आवश्यकता नहीं है। तो अगर कुछ और काम नहीं करता है, तो यह होगा।


कुछ ब्राउज़रों के लिए विशिष्ट समाधान

इंटरनेट एक्स्प्लोरर

Internet Explorer में क्रॉस डोमेन अनुरोध है

फ़ायरफ़ॉक्स

फ़ायरफ़ॉक्स 3.5+ में क्रॉस-ओरिजनल शेयरिंग स्टैंडर्ड है , लेकिन इसके लिए आवश्यक है कि आप विशेष हेडर को शामिल करने के लिए जिस एक्सेस को एक्सेस करने की कोशिश कर रहे हैं, उदाहरण के लिए:

header("content-type: Access-Control-Allow-Origin: *");
header("content-type: Access-Control-Allow-Methods: GET");

कुछ अन्य प्रमुख ब्राउज़र भी इसका समर्थन करते हैं , इसलिए यदि आपको पुराने ब्राउज़रों का समर्थन करने की आवश्यकता नहीं है और यदि आप उन स्रोतों को भेजने के लिए प्रयास कर रहे हैं, जिन्हें आप एक्सेस करने का प्रयास कर रहे हैं, तो यह आपका सर्वश्रेष्ठ दांव हो सकता है, अन्यथा सर्वर-साइड स्क्रिप्ट मेरी सिफारिश होगी।


फ़ायरफ़ॉक्स में एक उपयोगकर्ता सेटिंग भी है capability.policy.default.XMLHttpRequest.open, लेकिन मैं अपने ब्राउज़र में सेटिंग बदलने वाले उपयोगकर्ता पर भरोसा नहीं करूंगा।


0

आप उसके लिए एपीआई (दूसरे डोमेन का) का उपयोग कर सकते हैं। आपकी जावास्क्रिप्ट PHP फ़ाइल (या अन्य स्क्रिप्ट फ़ाइल) को कॉल करेगी जो आपके वेब सर्वर (आपके डोमेन) पर है, जो एपीआई (CURL का उपयोग करने वाले किसी अन्य डोमेन का) को कॉल करेगी और आपको प्रतिक्रिया मिलेगी।


यह उत्तर सर्वर पर प्रयुक्त तकनीक के बारे में इतना विशिष्ट होने की आवश्यकता नहीं है।
फंकीब्रुक

@funkybro हाँ, यह सिर्फ एक उदाहरण था ... कुछ खास नहीं ...
हरीश कुरुप
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.