Jawaban:
Ini adalah pertanyaan yang cukup luas, dan bisa menjamin wiki itu sendiri. Ada juga sedikit di google mengenai keduanya, tapi saya pikir saya bisa mencapai beberapa poin penting.
Jika tidak satu pun dari ini yang menjadi perhatian, saya akan memilih apa pun yang paling mudah atau paling Anda kenal. Jika ini adalah lemparan, coba CORS, karena ini adalah solusi yang lebih "modern" dan JSONP lebih merupakan peretasan, mengubah data menjadi skrip untuk melewati batasan lintas domain. Namun, CORS biasanya memerlukan lebih banyak konfigurasi sisi server.
Jika Anda menggunakan jQuery, saya tidak yakin dari mana Anda mendapatkan gagasan bahwa CORS " jauh lebih bersahabat dengan klien dan lebih mudah diimplementasikan ." Lihat https://gist.github.com/3131951 . jQuery mengabstraksi detail JsonP, dan CORS sebenarnya bisa agak rumit untuk diterapkan di sisi server Anda tergantung pada teknologi apa yang Anda gunakan.
Saya baru-baru ini mengembangkan aplikasi web, menggunakan jquery dan backbone.js, yang membaca dari berbagai layanan web lintas-domain yang kami kontrol, dan akhirnya menggunakan Json-P daripada CORS karena kami perlu mendukung IE7 dan itu sedikit lebih sederhana. sisi server (kami menjalankan Django w / DjangoRestFramework), dan hampir sama dengan jquery pada sisi klien.
Anda sangat tepat. Jika Anda tidak harus mendukung browser lama (yang dirilis 6+ tahun yang lalu) saya pasti akan menggunakan CORS.
CORS lebih mudah diimplementasikan, karena jika API Anda belum mendukung JSONP atau CORS, lebih mudah untuk menambahkan beberapa header statis daripada memodifikasi isi respons.
Juga lebih mudah untuk menyimpan permintaan dalam cache menggunakan CORS. Setiap permintaan JSONP harus dinamis bahkan dengan konten memcache.
JSONP masih merupakan tag skrip, jadi apa pun yang terjadi itu akan menyebabkan beberapa tingkat perilaku sinkron. CORS tidak akan.
JSONP hanya bisa menjadi GET. Dan seperti CORS, Anda dapat menggunakan metode apa pun.
Last but not least, jika Anda menggunakan jQuery v1.x , pertimbangkan bahwa error
dan complete
(atau lebih baik fail
dan always
) penangan masih tidak dipanggil untuk permintaan JSONP dalam beberapa situasi umum (misalnya kesalahan jaringan). Tentu ada solusi (pengaturan waktu tunggu, plugin jQuery-JSONP), tetapi saya menemukan CORS tidak terlalu mengganggu, terutama ketika permintaan lintas domain hanya datang dari perangkat seluler (yaitu aplikasi hybrid) sehingga Anda tidak memerlukan dukungan untuk browser yang tidak beruntung.
API Web kami tidak berfungsi di Safari (iOS 9.1) dengan Autentikasi Windows. Itu bekerja dengan Safari + iOS 8.4. Ketika kami mengubah ke JSONP Safari mulai bekerja kembali. Cek link ini untuk informasi lebih lanjut.