2014-09-15 17 views
7

को समझना मैं सीओआरएस के संबंध में वेब पर देख रहा हूं, और मैं यह पुष्टि करना चाहता हूं कि जो भी मैंने बनाया है, वह वास्तव में क्या है।सीओआरएस

नीचे उल्लिखित एक पूरी तरह काल्पनिक परिदृश्य है।

मैं एक सामान्य वेबसाइट का उदाहरण लेगा। कहें कि मेरे एचटीएमएल पेज में एक ऐसा फॉर्म है जो टेक्स्ट फ़ील्ड नाम लेता है। इसे सबमिट करने पर, यह फॉर्म डेटा को myPage.php पर भेजता है। अब, आंतरिक रूप से क्या होता है, सर्वर पाठ फ़ील्ड के साथ www.mydomain.com/mydirectory/myPage.php पर अनुरोध भेजता है। अब, सर्वर देखता है कि अनुरोध में एक ही डोमेन/पोर्ट/प्रोटोकॉल से बंद निकाल दिया गया था

(प्रश्न 1. सर्वर के बारे में इन सभी विवरण पता है। यह कहाँ? Froms इन सभी विवरण निकालने करता है)

फिर भी, चूंकि अनुरोध उसी डोमेन से निकला है, इसलिए यह php स्क्रिप्ट को सर्वर करता है और जो कुछ भी आवश्यक है उसे देता है।

अब, तर्क के लिए, मान लें कि मैं टेक्स्ट फ़ील्ड में मैन्युअल रूप से डेटा भरना नहीं चाहता हूं, बल्कि इसके बजाय मैं इसे प्रोग्रामेटिक रूप से करना चाहता हूं। मैं क्या करता हूं, मैं जावास्क्रिप्ट के साथ एक HTML पृष्ठ बनाता हूं और पैरामीटर के साथ एक POST अनुरोध को बंद करता हूं (यानी टेक्स्ट फ़ील्ड के मान)। अब जब से मेरा अनुरोध किसी भी डोमेन से नहीं है, तो सर्वर मेरे अनुरोध पर सेवा की उपेक्षा करता है। और मुझे क्रॉस डोमेन त्रुटि मिलती है?

इसी प्रकार, मैं जावा प्रोग्राम भी लिख सकता था, जो HTTP क्लाइंट/पोस्ट अनुरोध का उपयोग करता है और वही काम करता है।

प्रश्न 2: क्या यह समस्या है?

अब, सीओआरएस हमें क्या प्रदान करता है, कि सर्वर कहता है कि 'कोई भी myPage.php तक पहुंच सकता है'। enable cors.org से यह कहा गया है कि

सरल CORS अनुरोधों के लिए, सर्वर केवल अपनी प्रतिक्रिया के लिए निम्न शीर्ष लेख जोड़ने की जरूरत है: पहुंच-नियंत्रण-अनुमति दें-मूल: *

अब, वास्तव में क्या क्लाइंट इस हेडर के साथ करने जा रहा है। जैसा कि, ग्राहक वैसे भी सर्वर पर संसाधनों को कॉल करना चाहता था? यह सर्वर पर होना चाहिए ताकि वह खुद को कॉन्फ़िगर कर सके कि वह स्वीकार करना चाहे या नहीं, और तदनुसार कार्य करें।

प्रश्न 3: क्लाइंट को हेडर वापस भेजने का क्या उपयोग है (जो पहले ही सर्वर से अनुरोध कर चुका है)?

और आखिरकार, मुझे जो नहीं मिला वह यह है कि, मैं अपने एंड्रॉइड ऐप के लिए कुछ रीस्टफुल सेवाएं बना रहा हूं। अब, मेरे पास एक पोस्ट सेवा www.mydomain.com/rest/services/myPost है। मुझे अपने स्थानीय मशीन पर इन सेवाओं को होस्ट करने वाला मेरा टॉमकैट सर्वर मिला है।

मेरे एंड्रॉइड ऐप में, मैं बस इस सेवा को कॉल करता हूं, और परिणाम वापस प्राप्त करता हूं (यदि कोई हो)। इस मामले में मैंने वास्तव में सीओआरएस का उपयोग किया था। क्या यह सर्वर कॉल की एक अलग श्रेणी के अंतर्गत आता है? यदि हां, तो वास्तव में कैसे।

इसके अलावा, मैंने Enable Cors for Tomcat की जांच की और यह कहता है कि मैं अपने डायनामिक वेब प्रोजेक्ट के अपने web.xml में एक फ़िल्टर जोड़ सकता हूं, और फिर यह इसे स्वीकार करना शुरू कर देगा।

प्रश्न 4: क्या यह मेरे एंड्रॉइड डिवाइस से मेरे वेब सर्विसेज में कॉल सक्षम करने में सक्षम है?

धन्यवाद

उत्तर

7
  1. पहले सभी की, क्रॉस डोमेन जांच ब्राउज़र, नहीं सर्वर द्वारा किया जाता है। जब जावास्क्रिप्ट अपने मूल के अलावा किसी अन्य सर्वर पर XmlHttpRequest बनाता है, यदि ब्राउज़र CORS का समर्थन करता है तो यह एक सीओआरएस प्रक्रिया शुरू करेगा। अन्यथा, अनुरोध के परिणामस्वरूप एक त्रुटि होगी (जब तक उपयोगकर्ता ने जानबूझकर ब्राउज़र सुरक्षा को कम नहीं किया है)

  2. जब सर्वर Origin HTTP शीर्षलेख से मुकाबला करता है, तो सर्वर यह तय करेगा कि यह अनुमत डोमेन की सूची में है या नहीं। यदि यह सूची में नहीं है, तो अनुरोध विफल हो जाएगा (यानी सर्वर एक त्रुटि प्रतिक्रिया भेजेगा)।

नंबर 3 और 4 के लिए, मुझे लगता है कि आपको अलग-अलग प्रश्न पूछना चाहिए। अन्यथा यह सवाल बहुत व्यापक हो जाएगा। और मुझे लगता है कि अगर आप इसे हटा नहीं देते हैं तो यह जल्दी से बंद हो जाएगा।

CORS की एक विवरण के लिए, कृपया प्रोग्रामर से इस सवाल का जवाब देखें: https://softwareengineering.stackexchange.com/a/253043/139479

नोट: CORS एक सम्मेलन की अधिक है। यह सुरक्षा की गारंटी नहीं देता है। आप एक दुर्भावनापूर्ण ब्राउज़र लिख सकते हैं जो एक ही डोमेन नीति की उपेक्षा करता है। और यह किसी भी साइट से प्राप्त जावास्क्रिप्ट निष्पादित करेगा। आप मनमानी Origin हेडर के साथ HTTP शीर्षलेख भी बना सकते हैं, और किसी भी तृतीय पक्ष सर्वर से जानकारी प्राप्त कर सकते हैं जो CORS लागू करता है। सीओआरएस केवल तभी काम करता है जब आप अपने ब्राउज़र पर भरोसा करते हैं।

+1

क्या एक एपीआई जो सीओआरएस का समर्थन करता है, अनुरोध को निष्पादित करता है भले ही सीओआरएस उत्पत्ति एक मान्यता प्राप्त नहीं है? मैंने सीओआरएस के कार्यान्वयन को देखा है जहां अनुरोध हमेशा निष्पादित होता है, लेकिन प्रतिक्रिया पर सीओआरएस शीर्षलेख केवल सर्वर द्वारा सेट किए जाते हैं यदि उत्पत्ति पहचाना जाता है। यकीन नहीं है कि यह अच्छा डिजाइन है? – Josh

+0

@ जोश मुझे यकीन नहीं है। हमें चश्मा पर पूरी तरह से देखना होगा। मुझे लगता है कि यह एक नया सवाल पूछता है। – Krumia

+0

@ क्रोमिया: वास्तव में, यह कोर नहीं है जो केवल तभी काम करता है जब आप अपने ब्राउज़र पर भरोसा करते हैं: यह वही मूल नीति है। एसओपी सुरक्षा तंत्र है, सीओआरएस अपवादों को अनुमति देने का एक सुविधाजनक तरीका है। आप अपने ब्राउज़र पर भरोसा कर सकते हैं, लेकिन यदि आपकी होम बैंकिंग वेबसाइट में 'एक्सेस-कंट्रोल-ऑब्जेक्ट-ओरिजिनिन 'सेट है, तो आपको बुरा समय होगा! –

1

प्रश्न 3 के लिए, आपको दो साइटों और क्लाइंट के ब्राउज़र के बीच संबंधों को समझने की आवश्यकता है। चूंकि क्रुमिया ने अपने जवाब में बताया, यह अनुरोध में तीन प्रतिभागियों के बीच एक सम्मेलन है।

मैंने हाल ही में posted an article जो सीओआरएस हैंडशेक को काम करने के लिए डिज़ाइन किए गए हैं, इस बारे में थोड़ी अधिक जानकारी में जाता है।

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