Risposte:
Questa è una domanda piuttosto ampia e potrebbe giustificare un wiki a sé stante. C'è anche un bel po 'su Google per quanto riguarda i due, ma penso di poter colpire alcuni punti chiave.
Se nessuna di queste è una preoccupazione, andrei semplicemente con ciò che ti è più semplice o familiare. Se è un problema, prova CORS, poiché è la soluzione più "moderna" e JSONP è più un hack, trasformando i dati in script per aggirare le restrizioni tra domini. CORS, tuttavia, in genere richiede più configurazione lato server.
Se stai usando jQuery, non sono sicuro di dove ti venga in mente l'idea che CORS sia " molto più amichevole per il cliente e più facile da implementare ". Vedi https://gist.github.com/3131951 . jQuery riassume i dettagli di JsonP e CORS può effettivamente essere un po 'complicato da implementare sul tuo server a seconda della tecnologia che stai utilizzando.
Recentemente ho sviluppato un'app web, utilizzando jquery e backbone.js, che legge da vari servizi web interdominio che controlliamo, e ho finito per utilizzare Json-P invece di CORS perché abbiamo bisogno di supportare IE7 ed è stato un po 'più semplice su lato server (eseguiamo Django con DjangoRestFramework) e praticamente lo stesso con jquery sul lato client.
Sei abbastanza a posto. Se non è necessario supportare i browser legacy (quelli rilasciati più di 6 anni fa), sceglierei sicuramente CORS.
CORS è più facile da implementare, in quanto se la tua API non supporta già JSONP o CORS è più facile aggiungere solo alcune intestazioni statiche che modificare il corpo delle risposte.
Inoltre è più facile memorizzare nella cache le richieste utilizzando CORS. Ogni richiesta JSONP deve essere dinamica anche con contenuto memcached.
JSONP è ancora un tag script, quindi non importa cosa causerà un certo livello di comportamento sincrono. CORS non lo farà.
JSONP può essere solo un GET. E come con CORS puoi usare qualsiasi metodo.
Ultimo ma non meno importante, se stai usando jQuery v1.x , considera che error
e complete
(o meglio fail
e always
) gli handler non vengono ancora chiamati per le richieste JSONP in alcune situazioni comuni (ad esempio errori di rete). Sicuramente ci sono soluzioni alternative (impostazione del timeout, plug-in jQuery-JSONP), ma trovo CORS meno fastidioso, specialmente quando le richieste tra domini provengono solo da dispositivi mobili (cioè app ibride), quindi non è necessario il supporto per browser sfortunati.
Secondo Spring Documentation, JSONP è un hack e non una soluzione adeguata di Cross Origin Resource Sharing. Quindi, se la sicurezza non è la tua preoccupazione, controlla semplicemente l'origine del tuo dominio sul tuo server e aggiungi l'intestazione Access-Control-Allow-Origin Response.
La nostra API Web non funzionava su Safari (iOS 9.1) con autenticazione di Windows. Funzionava con Safari + iOS 8.4. Quando siamo passati a JSONP, Safari ha ricominciato a funzionare. Controlla questo collegamento per ulteriori informazioni.