क्रॉस-ऑरिजनल रिसोर्स शेयरिंग - CORS
(AKA क्रॉस-डोमेन AJAX अनुरोध) एक ऐसा मुद्दा है, जो ज्यादातर वेब डेवलपर्स को मिल सकता है, समान-उत्पत्ति-नीति के अनुसार, ब्राउज़र्स क्लाइंट जावास्क्रिप्ट को एक सुरक्षा सैंडबॉक्स में प्रतिबंधित करते हैं, आमतौर पर JS एक दूरस्थ सर्वर के साथ सीधे संवाद नहीं कर सकते हैं। एक अलग डोमेन से। पिछले डेवलपर्स में क्रॉस-डोमेन संसाधन अनुरोध को प्राप्त करने के लिए कई पेचीदा तरीके बनाए गए, जिनमें से अधिकतर का उपयोग करने के तरीके निम्न हैं:
- रिमोट के साथ संचार करने के लिए "प्रॉक्सी" के रूप में फ्लैश / सिल्वरलाइट या सर्वर साइड का उपयोग करें।
- JSON पैडिंग के साथ ( JSONP )।
- एक iframe में दूरस्थ सर्वर को एम्बेड करता है और खंड या window.name के माध्यम से संवाद करता है, यहां देखें ।
उन पेचीदा तरीकों में कम या ज्यादा कुछ मुद्दे हैं, उदाहरण के लिए JSONP में सुरक्षा छेद हो सकता है यदि डेवलपर्स इसे केवल "eval" करते हैं, और # 3 ऊपर, हालांकि यह काम करता है, दोनों डोमेन को एक दूसरे के बीच सख्त अनुबंध बनाना चाहिए, यह न तो लचीला है और न ही सुरुचिपूर्ण है। IMHO:)
W3C ने इस मुद्दे को हल करने के लिए एक सुरक्षित, लचीला और एक अनुशंसित मानक तरीका प्रदान करने के लिए मानक समाधान के रूप में क्रॉस-ऑरिजनल रिसोर्स शेयरिंग (CORS) की शुरुआत की थी।
यांत्रिकी
एक उच्च स्तर से हम केवल डीईएम कॉर्स को डी एएएक्स कॉल कर सकते हैं जो कि डोमेन ए से ग्राहक एएएक्सएक्स कॉल और डोमेन बी पर होस्ट किए गए पृष्ठ, एक विशिष्ट क्रॉस-ऑरिजनल अनुरोध / प्रतिक्रिया होगी:
DomainA AJAX हेडर का अनुरोध करता है
Host DomainB.com
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0) Gecko/20100101 Firefox/4.0
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8,application/json
Accept-Language en-us;
Accept-Encoding gzip, deflate
Keep-Alive 115
Origin http://DomainA.com
डोमेनबी प्रतिक्रिया हेडर
Cache-Control private
Content-Type application/json; charset=utf-8
Access-Control-Allow-Origin DomainA.com
Content-Length 87
Proxy-Connection Keep-Alive
Connection Keep-Alive
ऊपर जिन नीले हिस्सों को मैंने चिह्नित किया था वे गुठली के तथ्य थे, "उत्पत्ति" अनुरोध हेडर "इंगित करता है कि क्रॉस-ऑरिजनल अनुरोध या प्रीफ़्लाइट अनुरोध कहाँ से उत्पन्न होता है", "एक्सेस-कंट्रोल-अनुमति-उत्पत्ति" प्रतिक्रिया हैडर इंगित करता है कि यह पृष्ठ दूरस्थ अनुरोध की अनुमति देता है DomainA (यदि मान है * संकेत किसी भी डोमेन से दूरस्थ अनुरोध की अनुमति देता है)।
जैसा कि मैंने ऊपर बताया, वास्तव में क्रॉस-ओरिजिन HTTP अनुरोध को सबमिट करने से पहले W3 ने ब्राउज़र को " प्रीफ़लाइट अनुरोध " को लागू करने की सिफारिश की , संक्षेप में यह एक HTTP OPTIONS
अनुरोध है:
OPTIONS DomainB.com/foo.aspx HTTP/1.1
यदि foo.aspx विकल्प HTTP क्रिया का समर्थन करता है, तो यह नीचे की तरह प्रतिक्रिया दे सकता है:
HTTP/1.1 200 OK
Date: Wed, 01 Mar 2011 15:38:19 GMT
Access-Control-Allow-Origin: http://DomainA.com
Access-Control-Allow-Methods: POST, GET, OPTIONS, HEAD
Access-Control-Allow-Headers: X-Requested-With
Access-Control-Max-Age: 1728000
Connection: Keep-Alive
Content-Type: application/json
केवल यदि प्रतिक्रिया में "प्रवेश-नियंत्रण-अनुमति-उत्पत्ति" शामिल है और इसका मूल्य "*" है या उस डोमेन को शामिल करें जिसने CORS अनुरोध सबमिट किया है, तो यह अनिवार्य शर्त ब्राउज़र को संतुष्ट करके वास्तविक क्रॉस-डोमेन अनुरोध सबमिट करेगा, और परिणाम को कैश करेगा। " प्रीफ़लाइट-रिजल्ट-कैश " में।
मैंने तीन साल पहले CORS के बारे में ब्लॉग किया था: AJAX क्रॉस-ओरिजिन HTTP अनुरोध
http://siteA/MyCode.js
।