जवाबों:
यह एक बहुत व्यापक प्रश्न है, और अपने आप में एक विकी वारंट कर सकता है। दोनों के बारे में Google पर भी काफी कुछ है, लेकिन मुझे लगता है कि मैं कुछ प्रमुख बिंदुओं को मार सकता हूं।
यदि इनमें से कोई भी चिंता का विषय नहीं है, तो मैं आपके साथ सबसे आसान या सबसे अधिक परिचित हूं। यदि इसका टॉसअप है, तो CORS का प्रयास करें, क्योंकि यह अधिक "आधुनिक" समाधान है और JSONP एक हैक का अधिक है, डेटा को स्क्रिप्ट में बदलकर क्रॉस-डोमेन प्रतिबंधों को बायपास करने के लिए। हालाँकि, कोर को अधिक सर्वर-साइड कॉन्फ़िगरेशन की आवश्यकता होती है।
यदि आप jQuery का उपयोग कर रहे हैं, तो मुझे यकीन नहीं है कि आप इस विचार के साथ आ रहे हैं कि CORS " क्लाइंट के लिए अधिक अनुकूल है और लागू करने में आसान है ।" Https://gist.github.com/3131951 देखें । jQuery के JsonP के विवरण को अमूर्त करता है, और CORS वास्तव में आपके सर्वर-साइड पर निहित करने के लिए कुछ पेचीदा हो सकता है जो आप उपयोग की जाने वाली तकनीक पर निर्भर करते हैं।
मैंने हाल ही में jquery और backbone.js का उपयोग करके एक वेब ऐप विकसित किया है, जो विभिन्न क्रॉस-डोमेन वेब सेवाओं से पढ़ता है जिन्हें हम नियंत्रित करते हैं, और कॉर्स के बजाय Json-P का उपयोग करके समाप्त हो गए क्योंकि हमें IE7 का समर्थन करने की आवश्यकता है और यह थोड़ा सरल था सर्वर साइड (हम Django w / DjangoRestFramework चलाते हैं), और ग्राहक पक्ष पर jquery के साथ लगभग समान है।
तुम पर सुंदर जगह है। यदि आपको विरासत ब्राउज़रों का समर्थन नहीं करना है (6+ साल पहले जारी किए गए) तो मैं निश्चित रूप से कॉर्स के साथ जाऊंगा।
कोर लागू करना आसान है, अगर आपका एपीआई पहले से ही JSONP या CORS का समर्थन नहीं करता है, तो प्रतिक्रियाओं के शरीर को संशोधित करने की तुलना में कुछ स्थिर हेडर जोड़ना आसान है।
इसके अलावा कोर का उपयोग करके अनुरोधों को कैश करना आसान है। प्रत्येक JSONP अनुरोध को सामग्री के साथ भी गतिशील होना चाहिए।
JSONP अभी भी एक स्क्रिप्ट टैग है, इसलिए इससे कोई फर्क नहीं पड़ता कि यह समकालिक व्यवहार के कुछ स्तर का कारण होगा। कोर नहीं होगा।
JSONP केवल एक GET हो सकता है। और कॉर्स के साथ के रूप में आप किसी भी विधि का उपयोग कर सकते हैं।
अंतिम लेकिन कम से कम, यदि आप jQuery v1.x का उपयोग कर रहे हैं, तो विचार करें कि error
और complete
(या बेहतर fail
और always
) हैंडलर को अभी भी JSONP अनुरोधों के लिए कुछ सामान्य स्थितियों (जैसे नेटवर्क त्रुटियों) में नहीं बुलाया जाता है। निश्चित रूप से वर्कअराउंड्स (टाइमआउट सेटिंग, jQuery-JSONP प्लगइन) हैं, लेकिन मुझे लगता है कि कॉर्स कम कष्टप्रद हैं, बिल्कुल जब क्रॉस-डोमेन अनुरोध केवल मोबाइल डिवाइस (यानी हाइब्रिड ऐप) से आ रहे हैं, तो आपको अशुभ ब्राउज़रों के लिए समर्थन की आवश्यकता नहीं है।
हमारी वेब एपीआई विंडोज ऑथेंटिकेशन के साथ सफारी (iOS 9.1) पर काम नहीं कर रही थी। यह Safari + iOS 8.4 के साथ काम कर रहा था। जब हम JSONP सफ़ारी में बदल गए तो फिर से काम करना शुरू कर दिया। चेक इस लिंक अधिक जानकारी के लिए।