आपको निम्न त्रुटि संदेश मिल सकता है:
सीओआरएस नीति द्वारा अवरुद्ध किया गया है: अनुरोधित संसाधन पर कोई 'एक्सेस-कंट्रोल-अनुमति-उत्पत्ति' हेडर मौजूद नहीं है
यह त्रुटि इंगित करती है कि एक निश्चित पते के अनुरोध को सीओआरएस प्रोटोकॉल द्वारा अवरुद्ध कर दिया गया है क्योंकि एक्सेस-कंट्रोल-अनुमति-उत्पत्ति हेडर संसाधन से गायब है।
क्रॉस-ओरिजिनल समस्याओं का मूल कारण यह है कि ब्राउज़र, सुरक्षा कारणों से, वर्तमान साइट के बाहर संसाधनों तक पहुंच को प्रतिबंधित करते हैं।
उदाहरण के लिए, एक निश्चित पृष्ठ के साथ http://127.0.0.1:8080/ पर होस्ट की गई वेबसाइट पर विचार करें। यदि आप एक ही साइट से संसाधनों तक पहुँचते हैं, तो कोई प्रतिबंध नहीं है। लेकिन यदि आप किसी भिन्न साइट (उदाहरण के लिए, http://127.0.0.1:8081) से संसाधनों तक पहुंचने का प्रयास करते हैं, तो ब्राउज़र अनुरोध को ब्लॉक कर देगा।
नोट: हम प्रोटोकॉल, डोमेन और पोर्ट को "समान मूल" को परिभाषित करने के हिस्से के रूप में मानते हैं।
स्रोत विशेषता वाले तत्व, जैसे आईएमजी और स्क्रिप्ट टैग, इस प्रतिबंध के अधीन नहीं हैं।
ऐतिहासिक रूप से, जब फ्रंट-एंड और बैक-एंड अलग-अलग नहीं थे, पेज और अनुरोध इंटरफ़ेस एक ही डोमेन और पोर्ट के अंतर्गत मौजूद थे। फिर ब्राउज़र उसी डोमेन से संसाधनों का अनुरोध करने के लिए एक डोमेन पर होस्ट किए गए पृष्ठ से अनुरोधों की अनुमति देंगे।
उदाहरण के लिए, http://127.0.0.1:8080/index.html स्वतंत्र रूप से http://127.0.0.1:8080/a/b/c/userLit का अनुरोध कर सकते हैं।
आजकल, फ्रंट-एंड और बैक-एंड अलग-अलग अनुप्रयोगों में अलग-अलग होने के कारण, इसकी अनुमति नहीं है और इससे CORS समस्याएं उत्पन्न होंगी।
उत्पत्ति (या स्रोत) में प्रोटोकॉल, डोमेन और पोर्ट नंबर शामिल हैं।
एक यूआरएल प्रोटोकॉल, डोमेन, पोर्ट और पथ से बना होता है। दो यूआरएल को "समान मूल" माना जाता है यदि उनके प्रोटोकॉल, डोमेन और पोर्ट सभी समान हैं। इन तीन तत्वों में से किसी में कोई भी अंतर एक क्रॉस-ओरिजिन अनुरोध का गठन करता है।
https://www.baidu.com/index.html के लिए क्रॉस-ओरिजिन तुलना पर विचार करें:
यूआरएल | क्रॉस-ओरिजिन | कारण |
---|---|---|
https://www.baidu.com/more/index.html | नहीं | समान प्रोटोकॉल, डोमेन और पोर्ट |
https://map.baidu.com/ | हाँ | अलग-अलग डोमेन |
http://www.baidu.com/index.html | हाँ | विभिन्न प्रोटोकॉल |
https://www.baidu.com:81/index.html | हाँ | अलग पोर्ट |
समान-उत्पत्ति नीति एक मौलिक ब्राउज़र सुरक्षा सुविधा है। इसके बिना, ब्राउज़र की सामान्य कार्यक्षमता खतरे में पड़ सकती है। वेब आर्किटेक्चर काफी हद तक इस नीति पर निर्भर करता है, और सुरक्षा सुनिश्चित करने के लिए ब्राउज़र इसे लागू करते हैं।
समान मूल नीति में शामिल हैं:
एक परियोजना में जहां फ्रंट-एंड और बैक-एंड अलग-अलग तैनात किए जाते हैं, सीओआरएस को संबोधित करना महत्वपूर्ण है। कुकीज़ का उपयोग उपयोगकर्ता लॉगिन जानकारी संग्रहीत करने के लिए किया जाता है, और स्प्रिंग इंटरसेप्टर अनुमतियाँ प्रबंधित करते हैं। समस्याएँ तब उत्पन्न होती हैं जब इंटरसेप्टर और CORS को गलत क्रम में संसाधित किया जाता है, जिससे CORS त्रुटि उत्पन्न होती है।
एक HTTP अनुरोध सर्वलेट और फिर इंटरसेप्टर तक पहुंचने से पहले फ़िल्टर से होकर गुजरता है। यह सुनिश्चित करने के लिए कि CORS प्रसंस्करण प्राधिकरण अवरोधन से पहले होता है, हम CORS कॉन्फ़िगरेशन को एक फ़िल्टर में रख सकते हैं।
@Configuration public class CorsConfig { @Bean public CorsFilter corsFilter() { CorsConfiguration corsConfiguration = new CorsConfiguration(); corsConfiguration.addAllowedOrigin("*"); corsConfiguration.addAllowedHeader("*"); corsConfiguration.addAllowedMethod("*"); corsConfiguration.setAllowCredentials(true); UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource(); urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration); return new CorsFilter(urlBasedCorsConfigurationSource); } }
जबकि JSONP फ्रंट-एंड पर क्रॉस-ओरिजिन मुद्दों को संबोधित कर सकता है, यह केवल GET अनुरोधों का समर्थन करता है, जो RESTful अनुप्रयोगों में सीमित है। इसके बजाय, आप बैक-एंड पर क्रॉस-ऑरिजिन रिसोर्स शेयरिंग (सीओआरएस) के साथ क्रॉस-ऑरिजिन अनुरोधों को संभाल सकते हैं। यह समाधान स्प्रिंग बूट के लिए अद्वितीय नहीं है और इसका उपयोग पारंपरिक एसएसएम ढांचे में किया गया है। आप इसे WebMvcConfigurer इंटरफ़ेस लागू करके और addCorsMappings विधि को ओवरराइड करके कॉन्फ़िगर करते हैं।
@Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") .allowCredentials(true) .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") .maxAge(3600); } }
आप @RequestMapping एनोटेशन में @CrossOrigin एनोटेशन जोड़कर विशिष्ट नियंत्रक विधियों के लिए CORS को सक्षम कर सकते हैं। डिफ़ॉल्ट रूप से, @CrossOrigin @RequestMapping में निर्दिष्ट सभी मूल और HTTP विधियों की अनुमति देता है।
@RestController @RequestMapping("/account") public class AccountController { @CrossOrigin @GetMapping("/{id}") public Account retrieve(@PathVariable Long id) { // ... } @DeleteMapping("/{id}") public void remove(@PathVariable Long id) { // ... } }
@CrossOrigin पैरामीटर्स को समझना:
उदाहरण:
@CrossOrigin @RestController public class PersonController { @RequestMapping(method = RequestMethod.GET) public String add() { // some code } }
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3