2011-12-01 17 views
7

के साथ एचटीपी विकल्प विधि मैं backbone.js के मॉडल का उपयोग करता हूं। जब मैं मॉडल को सहेजता हूं, तो यह फ़ायरफ़ॉक्स पर सर्वर-साइड पर HTTP विकल्प विधि भेजता है, लेकिन सफारी के साथ HTTP पोस्ट विधि भेजता है।जावास्क्रिप्ट अनुरोध

मुझे पता है कि यह backbone.js के बारे में कोई समस्या नहीं है, यह सीओआरएस के बारे में है। मैं बस जांच करूँगा कि विधि, प्राप्त करें, पोस्ट करें, पुट करें और सर्वर-साइड पर हटाएं, मैं HTTP विकल्प विधि के साथ कोई काम नहीं करूंगा। api.foo.com और एपीआई से अनुरोध किया: bar.com HTTP पोस्ट विकल्प नहीं के साथ अपने api.foo.com

तो

, मैं कैसे सभी ब्राउज़रों में नियंत्रित कर सकते हैं का अनुरोध

मेरे अनुरोध किया गया URL मेरे एपीआई है ? और मैं किसी अन्य डोमेन से सभी अनुरोधों के साथ api.foo.com की सामग्री कैसे साझा कर सकता हूं?

नोट: पहुंच-नियंत्रण-अनुमति दें-मूल:: *

उत्तर

7

विकल्प अनुरोध वास्तव में है तथाकथित preflight request of the CORS specification मैं पहले से प्रतिक्रिया के हेडर सर्वर साइड से करने के लिए बदल गया है। यह प्रीफलाइट अनुरोध वेब ब्राउजर द्वारा यह जांचने के लिए किया जाता है कि सर्वर किस मूल स्थितियों से अनुरोध स्वीकार करेगा। अगर प्रीफलाइट अनुरोध की प्रतिक्रिया संतोषजनक थी, तो ब्राउज़र वास्तविक अनुरोध भेजेगा।

तो इस विनिर्देश का अनुपालन करने के लिए, आपको steps of preflight request processing पुन: पेश करने के लिए अपने सर्वर की आवश्यकता है।

+0

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

+0

@davit पर केवल POST विधि भेजें। सुरक्षा कारणों ([सीएसआरएफ] (https://www.owasp.org/index) के कारण क्रॉस-मूल अनुरोध [मूल XHR] (http://www.w3.org/TR/XMLHttpRequest/) के साथ सक्षम नहीं थे। php/पार Site_Request_Forgery))। [एक्सएचआर स्तर 2] (http://www.w3.org/TR/XMLHttpRequest2/) ने इसे संभव बना दिया लेकिन सीओआरएस विनिर्देश का अनुपालन करने की आवश्यकता के साथ। – Gumbo

+0

@ डेविट और हालांकि जीईटी को एक [सरल विधि] कहा जाता है (http://www.w3.org/TR/cors/#simple-method), एक [सरल क्रॉस-मूल अनुरोध] (http: // www .w3.org/TR/cors/# सरल-क्रॉस-मूल-अनुरोध) केवल तभी संभव है जब * बल प्रीफलाइट ध्वज * गलत है (i। e। यह * XMLHttpRequestUpload * अनुरोध नहीं है) और कोई अन्य शीर्षलेख फ़ील्ड नहीं हैं [सरल शीर्षलेख फ़ील्ड] से अनुरोध में (http://www.w3.org/TR/cors/#simple-header)। – Gumbo

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