दिलचस्प पोस्ट
Fancybox jQuery v1.9.0 के साथ काम नहीं करता एंड्रॉइड एसडीके स्थापना जेडीके नहीं मिलती एमवीसी रेजर देखें नेस्टेड फॉरचास मॉडल एंड्रॉइड: मैं ViewPager WRAP_CONTENT नहीं कर पा रहा हूं एंड्रॉइड जावा और फोनगैप जावास्क्रिप्ट के बीच संचार? पायथन वैरिएबल के प्रकार की जांच करने के लिए सर्वश्रेष्ठ (मुहावरेदार) तरीका क्या है? एकाधिक तालिकाओं से चुनें। माई एसक्यूएल सी # मैं कैसे जांच सकता हूँ कि कोई URL मौजूद है / मान्य है? <P> टैग में <div> टैग क्यों नहीं हो सकता? एक div / span टैग की स्थिति प्राप्त करें MySQL डाटाबेस से कैसे जुड़ें? कक्षा के लिए सीएसएस 3 एनटी प्रकार प्रतिबंधित मैं जावास्क्रिप्ट में एसिंक्रोनस फ़ंक्शन कैसे बना सकता हूं? पायथन कई स्ट्रिंग फ़ॉर्मेटिंग के तरीके – पुराने हैं (होने वाला) पदावनत? SQL सर्वर के लिए कनेक्शन की स्थापना करते समय नेटवर्क से संबंधित या इंस्टेंस-विशिष्ट त्रुटि क्यों हुई?

समान मूल नीति को दरकिनार करने के तरीके

एक ही मूल नीति

मैं एचटीएमएल / जेएस के समान मूल नीतियों के बारे में एक सामुदायिक विकी बनाना चाहता हूं ताकि उम्मीद है कि इस विषय के लिए खोज करने वाले किसी को भी मदद मिलेगी। यह एसओ पर सबसे ज्यादा खोजा जाने वाले विषयों में से एक है और इसके लिए कोई समेकित विकी नहीं है, इसलिए मैं यहां जाता हूं 🙂

एक ही मूल नीति एक मूल स्रोत से दूसरे मूल से दस्तावेज़ के गुणों को प्राप्त करने या स्थापित करने से एक मूल रूप से लोड किए गए दस्तावेज़ या स्क्रिप्ट को रोकती है। यह नीति नेटस्केप नेविगेटर 2.0 में वापस सभी तरह की है।

समान-मूल नीतियों के चारों ओर जाने के लिए आपके कुछ पसंदीदा तरीके क्या हैं?

कृपया उदाहरण अभिव्यक्ति रखें और अधिमानतः आपके स्रोतों को भी लिंक करें।

वेब के समाधान से एकत्रित समाधान "समान मूल नीति को दरकिनार करने के तरीके"

document.domain विधि

  • विधि प्रकार: iframe

ध्यान दें कि यह एक आइफ्रेम पद्धति है जो मौजूदा डोमेन के प्रत्यय में document.domain के मान सेट करती है। यदि ऐसा होता है, तो छोटे डोमेन बाद के मूल जांच के लिए उपयोग किया जाता है। उदाहरण के लिए, http://store.company.com/dir/other.html पर दस्तावेज़ में एक स्क्रिप्ट मानिए निम्न कथन को निष्पादित करता है:

 document.domain = "company.com"; 

उस कथन के निष्पादन के बाद, पृष्ठ http://company.com/dir/page.html साथ मूल जांच को पारित करेगा। हालांकि, एक ही तर्क से, company.com document.domain को सेट नहीं कर सका। othercompany.com को othercompany.com

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

स्रोत: https://developer.mozilla.org/en/Same_origin_policy_for_JavaScript

क्रॉस-ओरिजिन संसाधन शेयरिंग विधि

  • विधि प्रकार: AJAX

क्रॉस-ओरिजिन रिसोर्स शेयरिंग (सीओआरएस) एक डब्लू 3 सी वर्किंग ड्राफ्ट है जो यह बताता है कि ब्राउज़र और सर्वर को मूल के स्रोतों तक पहुंचने के दौरान किस प्रकार संवाद करना चाहिए। सीओआरएस के पीछे मूल विचार कस्टम HTTP हैडर का उपयोग करने के लिए ब्राउज़र और सर्वर दोनों को एक-दूसरे के बारे में पर्याप्त जानकारी प्रदान करने के लिए अनुमति देने के लिए है, यह निर्धारित करने के लिए कि क्या अनुरोध या प्रतिक्रिया सफल हो या विफल हो।

एक साधारण अनुरोध के लिए, जो कोई भी कस्टम हेडर के साथ GET या POST का उपयोग करता है और जिसके शरीर text/plain , अनुरोध Origin नामक एक अतिरिक्त शीर्षलेख के साथ भेजा जाता है। मूल शीर्षक में अनुरोध पृष्ठ के मूल (प्रोटोकॉल, डोमेन नाम और पोर्ट) शामिल हैं, ताकि सर्वर आसानी से यह निर्धारित कर सके कि उसे प्रतिक्रिया की जानी चाहिए या नहीं। एक उदाहरण Origin शीर्षक इस तरह दिख सकता है:

 Origin: http://www.stackoverflow.com 

यदि सर्वर का फैसला करता है कि अनुरोध को अनुमति दी जानी चाहिए, तो वह एक Access-Control-Allow-Origin हेडर को एक ही मूल वापस भेजा गया था जो भेजा गया था या * अगर यह सार्वजनिक संसाधन है उदाहरण के लिए:

 Access-Control-Allow-Origin: http://www.stackoverflow.com 

यदि यह शीर्षलेख अनुपलब्ध है, या मूल मैच नहीं है, तो ब्राउज़र अनुरोध को अस्वीकार करता है। यदि सब कुछ ठीक है, तो ब्राउज़र अनुरोध पर प्रक्रिया करता है। ध्यान दें कि न तो अनुरोधों और न ही उत्तर में कुकी जानकारी शामिल है।

मोज़िला टीम withCredentials बारे में अपने पद में सुझाव देती है कि आपको यह पता करने के लिए withCredentials संपत्ति के अस्तित्व की जांच करनी चाहिए कि ब्राउज़र XHR के माध्यम से withCredentials का समर्थन करता है या नहीं। आप तब कर सकते हैं जब XDomainRequest ऑब्जेक्ट के अस्तित्व के साथ जोड़े को सभी ब्राउज़रों को कवर करने के लिए:

 function createCORSRequest(method, url){ var xhr = new XMLHttpRequest(); if ("withCredentials" in xhr){ xhr.open(method, url, true); } else if (typeof XDomainRequest != "undefined"){ xhr = new XDomainRequest(); xhr.open(method, url); } else { xhr = null; } return xhr; } var request = createCORSRequest("get", "http://www.stackoverflow.com/"); if (request){ request.onload = function() { // ... }; request.onreadystatechange = handler; request.send(); } 

ध्यान दें कि CORS विधि के काम करने के लिए, आपको किसी भी प्रकार के सर्वर हैडर मैकेनिक तक पहुंच की आवश्यकता है और केवल किसी भी तीसरे पक्ष संसाधन का उपयोग नहीं कर सकते

स्रोत: http://www.nczonline.net/blog/2010/05/25/cross-domain-ajax-with-cross-origin-resource-sharing/

window.postMessagewindow.postMessage विधि

  • विधि प्रकार: iframe

window.postMessage , जब बुलाया जाता है, लक्ष्य विंडो पर प्रेषित होने के लिए एक MessageEvent का कारण बनता है, जब किसी भी लंबित स्क्रिप्ट को निष्पादित किया जाना चाहिए जो पूरा होता है (उदाहरण के लिए, शेष ईवेंट हैंडलर अगर window.postMessage को ईवेंट हैंडलर, पूर्व-निर्धारित लंबित समयबाह्य आदि) से कहा जाता है। )। MessageEvent में प्रकार संदेश, एक data गुण है जो खिड़की में प्रदान किए गए पहला तर्क के स्ट्रिंग मान पर सेट है। संदेश। खिड़की में खिड़की बुला रही खिड़की में मुख्य दस्तावेज़ की उत्पत्ति से window.postMessage एक origin प्रॉपर्टी। संदेश समय window.postMessage पर window.postMessage window.postMessage को बुलाया गया था, और एक source प्रॉपर्टी जो खिड़की है जिसमें से window.postMessage कहा जाता है।

window.postMessage उपयोग करने के लिए, एक ईवेंट श्रोता संलग्न होना चाहिए:

  // Internet Explorer window.attachEvent('onmessage',receiveMessage); // Opera/Mozilla/Webkit window.addEventListener("message", receiveMessage, false); 

और एक प्राप्त receiveMessage समारोह घोषित किया जाना चाहिए:

 function receiveMessage(event) { // do something with event.data; } 

ऑफ़-साइट iframe को पोस्ट postMessage माध्यम से ठीक से ईवेंट भेजना होगा:

 <script>window.parent.postMessage('foo','*')</script> 

खिड़की में दस्तावेज़ के स्थान की परवाह किए बिना किसी भी खिड़की, किसी भी समय, किसी भी अन्य विंडो पर इस पद्धति का उपयोग कर सकते हैं, उसे संदेश भेजने के लिए। नतीजतन, संदेशों को प्राप्त करने के लिए उपयोग किए जाने वाले किसी ईवेंट श्रोता को पहले संदेश के प्रेषक की पहचान, मूल और संभावित स्रोत गुणों का उपयोग करना चाहिए। यह महत्व नहीं दिया जा सकता है: origin जांच में विफलता और संभवतः source गुण क्रॉस-साइट स्क्रिप्टिंग हमलों को सक्षम बनाता है

स्रोत: https://developer.mozilla.org/en/DOM/window.postMessage

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

  • विधि प्रकार: अजाक्स

सर्वर पर एक सरल रिवर्स प्रॉक्सी सेट करना, ब्राउज़र को अजाक्स अनुरोध के लिए सापेक्ष पथ का उपयोग करने की अनुमति देगा, जबकि सर्वर किसी दूरस्थ स्थान पर प्रॉक्सी के रूप में कार्य करेगा।

अपाचे में mod_proxy का उपयोग करते समय, एक रिवर्स प्रॉक्सी सेट करने के लिए मूल कॉन्फ़िगरेशन निर्देश प्रॉक्सीपैस है ProxyPass यह आमतौर पर निम्नानुसार प्रयोग किया जाता है:

 ProxyPass /ajax/ http://other-domain.com/ajax/ 

इस मामले में, ब्राउज़र /ajax/web_service.xml को एक सापेक्ष यूआरएल के रूप में अनुरोध करने में सक्षम होगा, लेकिन सर्वर http://other-domain.com/ajax/web_service.xml प्रॉक्सी के रूप में अभिनय करके इसे सेवा देगा।

इस पद्धति की एक दिलचस्प विशेषता यह है कि रिवर्स प्रॉक्सी आसानी से कई बैक-एंड के लिए अनुरोधों को वितरित कर सकता है, इस प्रकार एक लोड बैलेंसर के रूप में कार्य करता है।

मैं JSONP का उपयोग करता हूँ

असल में, आप जोड़ते हैं

 <script src="http://..../someData.js?callback=some_func"/> 

तुम्हारे पन्ने पर।

some_func () को कॉल किया जाना चाहिए ताकि आपको सूचित किया जाये कि डेटा में है

AnyOrigin कुछ https साइट्स के साथ अच्छी तरह से काम नहीं कर रहा था, इसलिए मैंने सिर्फ एक ओपन सोर्स विकल्प लिखा है जिसे जेयरीगिन.ओआरजी कहते हैं जो कि https के साथ अच्छी तरह काम करते हैं।

गिटूब पर कोड

मैंने पाया है कि एक ही मूल नीति पर काबू पाने का सबसे हाल का तरीका है http://anyorigin.com/

साइट बनाई गई है ताकि आप इसे किसी भी यूआरएल दें और यह आपके लिए जावास्क्रिप्ट / jquery कोड उत्पन्न करता है जिससे आप HTML / डेटा प्राप्त कर सकते हैं, इसके मूल की परवाह किए बिना। दूसरे शब्दों में, यह किसी यूआरएल या वेबपेज को JSONP अनुरोध करता है।

मैंने इसे बहुत ही उपयोगी पाया है 🙂

Anyorigin से यहां कुछ उदाहरण जावास्क्रिप्ट कोड है:

 $.getJSON('http://anyorigin.com/get?url=google.com&callback=?', function(data){ $('#output').html(data.contents); }); 

मैं इस छवि के लिए क्रेडिट का दावा नहीं कर सकता, लेकिन यह इस विषय पर मैं जो भी जानता हूं उससे मेल खाता है और एक ही समय में हास्य का थोड़ा सा प्रदान करता है।

http://www.flickr.com/photos/iluvrhinestones/5889370258/

JSONP को मन में आता है:

जेएसओएनपी या "पैडिंग के साथ जेसनॉन" बेस जेएसओएन डेटा प्रारूप के लिए एक पूरक है, एक उपयोग पैटर्न जो कि एक पेज को प्राथमिक सर्वर के अलावा किसी अन्य सर्वर से अनुरोध करने और अधिक अर्थपूर्ण रूप से JSON का उपयोग करने की अनुमति देता है। जेएसओएनपी क्रॉस-ओरिजिन रिसोर्स शेयरिंग नामक एक हालिया पद्धति का एक विकल्प है।

निजी तौर पर, window.postMessage सबसे आधुनिक तरीका है जो मैंने आधुनिक ब्राउज़रों के लिए पाया है। आपको यह सुनिश्चित करने के लिए थोड़ी अधिक काम करना होगा कि आप अपने आप को एक्सएसएस हमलों के लिए नहीं छोड़ रहे हैं, लेकिन यह एक उचित ट्रेडऑफ है।

वहाँ लोकप्रिय जावास्क्रिप्ट टूलकिट के लिए कई प्लगइन्स भी हैं जो कि window.postMessage लपेटते हैं। window.postMessage जो ऊपर चर्चा की गई अन्य विधियों का उपयोग करते हुए पुराने ब्राउज़रों को समान कार्यक्षमता प्रदान करते हैं।

ठीक है, मैंने PHP में कर्ल को इसका इस्तेमाल करने के लिए इस्तेमाल किया। मेरे पोर्ट 82 में चल रहे एक webservice है

 <?php $curl = curl_init(); $timeout = 30; $ret = ""; $url="http://localhost:82/put_val?val=".$_GET["val"]; curl_setopt ($curl, CURLOPT_URL, $url); curl_setopt ($curl, CURLOPT_FOLLOWLOCATION, 1); curl_setopt ($curl, CURLOPT_MAXREDIRS, 20); curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5"); curl_setopt ($curl, CURLOPT_CONNECTTIMEOUT, $timeout); $text = curl_exec($curl); echo $text; ?> 

यहां जावास्क्रिप्ट है जो PHP फ़ाइल को कॉल करता है

 function getdata(obj1, obj2) { var xmlhttp; if (window.XMLHttpRequest) xmlhttp=new XMLHttpRequest(); else xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("txtHint").innerHTML=xmlhttp.responseText; } } xmlhttp.open("GET","phpURLFile.php?eqp="+obj1+"&val="+obj2,true); xmlhttp.send(); } 

मेरा HTML पोर्ट 80 में WAMP पर चलता है। इसलिए हम वहां जाते हैं, समान मूल नीति को दरकिनार कर दिया गया है 🙂

यहां कुछ मूल सिद्धांत और समान-मूल-नीति का विवरण दिया गया है:
थिरू का ब्लॉग – एक समान मूल नीति के समाधान ब्राउज़र

यह बहुत ज्यादा विश्लेषण करता है कि वहां क्या उपलब्ध है: http://www.slideshare.net/SlexAxton/breaking-the-cross-domain-barrier

पोस्ट मेसेज समाधान के लिए इसमें एक नज़र डालें:

https://github.com/chrissrogers/jquery-postmessage/blob/master/jquery.ba-postmessage.js

और थोड़ा अलग संस्करण:

https://github.com/thomassturm/ender-postmessage/blob/master/ender-postmessage.js