तो, JSONP या CORS? [बन्द है]


111

मेरा WebAPI इंट्रानेट वातावरण में तैनात किया गया था । इसका मतलब है कि सुरक्षा मेरी चिंता नहीं थी।

ऐसा लगता है कि कोर ग्राहक के लिए बहुत अधिक अनुकूल है और इसे लागू करना आसान है

कोई और चिंता जो मुझे याद हो सकती है?

जवाबों:


144

यह एक बहुत व्यापक प्रश्न है, और अपने आप में एक विकी वारंट कर सकता है। दोनों के बारे में Google पर भी काफी कुछ है, लेकिन मुझे लगता है कि मैं कुछ प्रमुख बिंदुओं को मार सकता हूं।

  • यदि आपको अपने सर्वर पर केवल पढ़ने के लिए ajax इंटरफ़ेस की आवश्यकता है और आपको IE <= 9, ओपेरा <12, या फ़ायरफ़ॉक्स <3.5 या अन्य पुराने या अस्पष्ट ब्राउज़रों का समर्थन करने की आवश्यकता है, तो कोर्स बाहर है, JSONP का उपयोग करें। IE8 और IE9 सॉर्ट कॉर्स का समर्थन करते हैं, लेकिन समस्याएं हैं, नीचे पहली टिप्पणी में लिंक देखें।
  • दूसरी ओर, यदि आपका वेब एपीआई पढ़ने (लिखने (जैसे पूर्ण रीस्ट या सिर्फ POST / GET) के बजाय सिर्फ पढ़ा (यानी प्राप्त) है, तो JSONP बाहर है। कोर का उपयोग करें। JSONP स्वाभाविक रूप से केवल-पढ़ने के लिए है।

यदि इनमें से कोई भी चिंता का विषय नहीं है, तो मैं आपके साथ सबसे आसान या सबसे अधिक परिचित हूं। यदि इसका टॉसअप है, तो CORS का प्रयास करें, क्योंकि यह अधिक "आधुनिक" समाधान है और JSONP एक हैक का अधिक है, डेटा को स्क्रिप्ट में बदलकर क्रॉस-डोमेन प्रतिबंधों को बायपास करने के लिए। हालाँकि, कोर को अधिक सर्वर-साइड कॉन्फ़िगरेशन की आवश्यकता होती है।

यदि आप jQuery का उपयोग कर रहे हैं, तो मुझे यकीन नहीं है कि आप इस विचार के साथ आ रहे हैं कि CORS " क्लाइंट के लिए अधिक अनुकूल है और लागू करने में आसान है ।" Https://gist.github.com/3131951 देखें । jQuery के JsonP के विवरण को अमूर्त करता है, और CORS वास्तव में आपके सर्वर-साइड पर निहित करने के लिए कुछ पेचीदा हो सकता है जो आप उपयोग की जाने वाली तकनीक पर निर्भर करते हैं।

मैंने हाल ही में jquery और backbone.js का उपयोग करके एक वेब ऐप विकसित किया है, जो विभिन्न क्रॉस-डोमेन वेब सेवाओं से पढ़ता है जिन्हें हम नियंत्रित करते हैं, और कॉर्स के बजाय Json-P का उपयोग करके समाप्त हो गए क्योंकि हमें IE7 का समर्थन करने की आवश्यकता है और यह थोड़ा सरल था सर्वर साइड (हम Django w / DjangoRestFramework चलाते हैं), और ग्राहक पक्ष पर jquery के साथ लगभग समान है।


3
यदि आप IE8 और IE9 का समर्थन कर रहे हैं, तो यह सामग्री-प्रकार "पाठ / सादा" के लिए मजबूर होने के कारण भी CORS को नियंत्रित कर सकता है, देखें बिंदु (4) blogs.msdn.com/b/ieinternals/archive/2010/05 पर / १३ /…
जैमीबारो

आपके जवाब में बहुत मददगार है, धन्यवाद!
एमवीसीडीएस

मुझे समझ में आया कि JSONP आपको क्लाइंट साइड पर और कोर को आपको सर्वर साइड पर हैंडल करना है। सही बात?
Dips

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

45

तुम पर सुंदर जगह है। यदि आपको विरासत ब्राउज़रों का समर्थन नहीं करना है (6+ साल पहले जारी किए गए) तो मैं निश्चित रूप से कॉर्स के साथ जाऊंगा।

कोर लागू करना आसान है, अगर आपका एपीआई पहले से ही JSONP या CORS का समर्थन नहीं करता है, तो प्रतिक्रियाओं के शरीर को संशोधित करने की तुलना में कुछ स्थिर हेडर जोड़ना आसान है।

इसके अलावा कोर का उपयोग करके अनुरोधों को कैश करना आसान है। प्रत्येक JSONP अनुरोध को सामग्री के साथ भी गतिशील होना चाहिए।

JSONP अभी भी एक स्क्रिप्ट टैग है, इसलिए इससे कोई फर्क नहीं पड़ता कि यह समकालिक व्यवहार के कुछ स्तर का कारण होगा। कोर नहीं होगा।

JSONP केवल एक GET हो सकता है। और कॉर्स के साथ के रूप में आप किसी भी विधि का उपयोग कर सकते हैं।


3
मैंने "तुल्यकालिक व्यवहार" जानकारी की सराहना की।
जुआन लानुस

मेरा मानना ​​है कि आप एक async फैशन में एक स्क्रिप्ट डाउनलोड कर सकते हैं। JQuery इस पैरामीटर को अजाक्स अनुरोधों पर प्रदान करता है। मुझे यकीन नहीं है कि यह jsonp के लिए काम करता है या नहीं। api.jquery.com/jquery.ajax
eran otzap

11

अंतिम लेकिन कम से कम, यदि आप jQuery v1.x का उपयोग कर रहे हैं, तो विचार करें कि errorऔर complete(या बेहतर failऔर always) हैंडलर को अभी भी JSONP अनुरोधों के लिए कुछ सामान्य स्थितियों (जैसे नेटवर्क त्रुटियों) में नहीं बुलाया जाता है। निश्चित रूप से वर्कअराउंड्स (टाइमआउट सेटिंग, jQuery-JSONP प्लगइन) हैं, लेकिन मुझे लगता है कि कॉर्स कम कष्टप्रद हैं, बिल्कुल जब क्रॉस-डोमेन अनुरोध केवल मोबाइल डिवाइस (यानी हाइब्रिड ऐप) से आ रहे हैं, तो आपको अशुभ ब्राउज़रों के लिए समर्थन की आवश्यकता नहीं है।


1
कॉलबैक की जानकारी के लिए +1
सादे

1

स्प्रिंग डॉक्यूमेंटेशन के अनुसार, JSONP एक हैक है और क्रॉस ओरिजिनल रिसोर्स शेयरिंग का उचित समाधान नहीं है। इसलिए यदि सुरक्षा आपकी चिंता नहीं है, तो बस अपने सर्वर पर अपने डोमेन मूल की जांच करें और Access-Control-Allow-Origin Response हेडर जोड़ें।


-1

हमारी वेब एपीआई विंडोज ऑथेंटिकेशन के साथ सफारी (iOS 9.1) पर काम नहीं कर रही थी। यह Safari + iOS 8.4 के साथ काम कर रहा था। जब हम JSONP सफ़ारी में बदल गए तो फिर से काम करना शुरू कर दिया। चेक इस लिंक अधिक जानकारी के लिए।


यह भी एक अच्छा लेख है - blog.algolia.com/jsonp-still-mandatory
अनूप
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.