Yanıtlar:
Bu oldukça geniş bir sorudur ve kendi başına bir wiki gerektirebilir. İkisiyle ilgili de google'da epey bir şey var, ancak birkaç önemli noktaya ulaşabileceğimi düşünüyorum.
Bunların hiçbiri endişe verici değilse, size en kolay veya en tanıdık gelen şeyle giderim. Bu bir hata ise, CORS'u deneyin, çünkü daha "modern" bir çözüm ve JSONP daha çok bir hack'tir, alanlar arası kısıtlamaları aşmak için verileri komut dosyalarına dönüştürür. Ancak CORS, tipik olarak daha fazla sunucu tarafı yapılandırması gerektirir.
JQuery kullanıyorsanız, CORS'un " müşteri için çok daha dostça ve uygulaması daha kolay " olduğu fikrini nereden bulduğunuzdan emin değilim . Https://gist.github.com/3131951 adresine bakın . jQuery, JsonP'nin ayrıntılarını özetler ve CORS, hangi teknolojiyi kullandığınıza bağlı olarak sunucu tarafınızda uygulanması biraz zor olabilir.
Yakın zamanda jquery ve backbone.js kullanarak, kontrol ettiğimiz çeşitli etki alanları arası web hizmetlerinden okuyan bir web uygulaması geliştirdim ve IE7'yi desteklememiz gerektiğinden CORS yerine Json-P kullanmaya başladım ve bu biraz daha basitti sunucu tarafında (DjangoRestFramework w / DjangoRestFramework çalıştırıyoruz) ve istemci tarafında jquery ile hemen hemen aynı.
İyi bir yerdesin. Eski tarayıcıları (6+ yıl önce piyasaya sürülenleri) desteklemeniz gerekmiyorsa, kesinlikle CORS ile giderim.
CORS'un uygulanması daha kolaydır, çünkü API'niz JSONP veya CORS'yi zaten desteklemiyorsa, yanıtların gövdesini değiştirmekten yalnızca birkaç statik başlık eklemek daha kolaydır.
Ayrıca CORS kullanarak istekleri önbelleğe almak daha kolaydır. Her JSONP isteğinin, memcached içeriğiyle bile dinamik olması gerekir.
JSONP hala bir komut dosyası etiketidir, bu nedenle ne olursa olsun bazı eşzamanlı davranışlara neden olur. CORS olmayacak.
JSONP yalnızca bir GET olabilir. Ve CORS ile olduğu gibi herhangi bir yöntemi kullanabilirsiniz.
Son fakat en az değil, jQuery v1.x kullanıyorsanız , bunu error
ve complete
(veya daha iyisi fail
ve always
) işleyicilerin bazı yaygın durumlarda (örneğin ağ hataları) JSONP istekleri için hala çağrılmadığını göz önünde bulundurun . Elbette geçici çözümler var (zaman aşımı ayarı, jQuery-JSONP eklentisi), ancak özellikle etki alanları arası istekler yalnızca mobil cihazlardan (yani hibrit uygulamalardan) geldiğinde CORS'u daha az can sıkıcı buluyorum, bu nedenle şanssız tarayıcılar için desteğe ihtiyacınız yok.
Web API'miz Windows Kimlik Doğrulaması ile Safari (iOS 9.1) üzerinde çalışmıyordu. Safari + iOS 8.4 ile çalışıyordu. JSONP Safari'ye geçtiğimizde tekrar çalışmaya başladık. Daha fazla bilgi için bu bağlantıyı kontrol edin .