2013-01-04 48 views
9

मैं फ़्लिकर REST API साथ काम कर रहा हूँ और यह ठीक काम करता है, जो मेरा मतलब है मैं Flickr API के लिए एक AJAX कॉल करते हैं, मैं एक JSON ऑब्जेक्ट मिलता है, मैं वस्तु को पार्स, आदिब्राउज़र के लिए एक ही डोमेन-मूल नीति होने पर एक REST API जावास्क्रिप्ट के साथ कैसे काम करता है?

लेकिन अब मैं एक प्रश्न है: यदि ब्राउज़र Same_origin_policy का पालन करते हैं, तो हम इस प्रकार के एपीआई का अनुरोध कैसे कर सकते हैं?

This DEMO काम करता है, लेकिन यह फ़्लिकर डोमेन

करने के लिए एक क्रॉस डोमेन अनुरोध भेजने किसी भी एक मुझे बता सकते हैं कि कैसे इस क्रॉस-डोमेन अनुरोध काम करता है?

क्रॉस-डोमेन अनुरोध

$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?id=" + id + "&lang=en-us&format=json&jsoncallback=1"); 

उत्तर

10

क्या आप समझने की जरूरत है कि, जबकि ब्राउज़रों एक ही मूल नीति (एसओपी), वहाँ अपवाद हैं लागू कर एसओपी लागू नहीं किया जाता है। उदाहरण के लिए, यदि आपके पास एक HTML पृष्ठ है - तो आप <img> टैग्स को सम्मिलित कर सकते हैं जो किसी भी डोमेन पर छवियों को इंगित करते हैं। इसलिए, एसओपी यहां लागू नहीं होता है और आप एक छवि के लिए एक क्रॉस-उत्पत्ति HTTP GET अनुरोध कर रहे हैं।

डेमो जो आप काम से जुड़े हैं क्योंकि यह एक तंत्र का उपयोग करता है जो एक समान तरीके से काम करता है। तंत्र को JSONP - http://en.wikipedia.org/wiki/JSONP कहा जाता है और मेरा सुझाव है कि आप विकी प्रविष्टि और कुछ अन्य ब्लॉग पोस्ट पढ़ें। संक्षेप में, JSONP गतिशील रूप से <script> टैग को किसी भी डोमेन (अनुरोध के पैरामीटर यूआरएल क्वेरी पैराम्स के रूप में जोड़ा जाता है) के लिए अनुरोध भेजने के लिए गतिशील रूप से इंजेक्ट करता है, क्योंकि उसी मूल नीति <script> टैग पर लागू नहीं होती है (क्योंकि यह <img> टैग पर लागू नहीं होती है)।

अन्य डोमेन पर रीस्ट एपीआई का आह्वान करने का एक और तरीका क्रॉस-मूल संसाधन साझाकरण तंत्र (सीओआरएस) - http://en.wikipedia.org/wiki/Cross-origin_resource_sharing का उपयोग करना है। संक्षेप में, यह तंत्र सक्षम बनाता है कि ब्राउज़र क्रॉस-मूल अनुरोध से इनकार नहीं करते हैं, बल्कि लक्ष्य सेवा से पूछें कि क्या यह एक विशिष्ट क्रॉस-मूल अनुरोध की अनुमति देना चाहता है। लक्ष्य सेवा ब्राउज़र को बताती है कि वह प्रतिक्रियाओं में विशेष HTTP शीर्षलेख डालने से क्रॉस-मूल अनुरोधों को अनुमति देना चाहता है:

Access-Control-Allow-Origin: http://www.example.com 
+0

ग्रेट उत्तर, इवान। मेरा सवाल यह है कि, क्या आप जावास्क्रिप्ट में कह रहे हैं, किसी भी आरईएसटी एपीआई के लिए उपरोक्त उदाहरणों की तरह एक तंत्र की आवश्यकता होती है? या फिर से भरने के लिए, सभी आरईएसटी एपीआई डेवलपर्स को विकसित करते समय क्रॉस-ओरिजिनल मुद्दे पर विचार करना चाहिए? – technophyle

+0

@technophyle - हाँ, ऐसा लगता है। ब्राउज़र में जावास्क्रिप्ट द्वारा किए गए दूरस्थ अनुरोध एसओपी से प्रभावित होते हैं, इसलिए एपीआई डेवलपर्स द्वारा यह कुछ माना जाना चाहिए यदि वे चाहते हैं कि एपीआई ऐसे ग्राहकों के लिए उपलब्ध हो। –