Відповіді:
Це досить широке запитання, і воно може гарантувати собі вікі. У Google також є досить багато щодо Google, але я думаю, що я можу вдарити декілька ключових моментів.
Якщо жодне з цих питань не викликає занепокоєння, я б просто пішов із тим, що вам найпростіше чи найвідоміше. Якщо це закидання, спробуйте CORS, оскільки це більш "сучасне" рішення, і JSONP - це більше хак, перетворюючи дані в сценарії, щоб обійти обмеження між доменними. Тим не менш, CORS, як правило, вимагає більше налаштування на стороні сервера.
Якщо ви використовуєте jQuery, я не впевнений, звідки ви придумали, що CORS " набагато привітніший до клієнта і простіший у виконанні ". Дивіться https://gist.github.com/3131951 . jQuery резюмує деталі JsonP, і CORS насправді може бути дещо складним у введенні на вашу сторону сервера, залежно від технології, яку ви використовуєте.
Нещодавно я розробив веб-додаток, використовуючи jquery та backbone.js, який читає з різних веб-сервісів між доменами, якими ми керуємо, і в кінцевому підсумку використовує Json-P замість CORS, оскільки нам потрібно підтримувати IE7, і це було трохи простіше на стороні сервера (ми запускаємо Django w / DjangoRestFramework) і практично те саме, що й jquery на стороні клієнта.
Ви гарне місце на. Якщо вам не доведеться підтримувати застарілі веб-переглядачі (випущені 6+ років тому), я б точно перейшов із CORS.
CORS простіше реалізувати, оскільки якщо ваш API вже не підтримує JSONP або CORS, простіше просто додати кілька статичних заголовків, ніж змінювати тіло відповідей.
Також простіше кешувати запити за допомогою CORS. Кожен запит JSONP повинен бути динамічним навіть із вмістом, що запам'ятовується.
JSONP все ще є тегом скрипту, тому незалежно від того, що це спричинить певний рівень синхронної поведінки. CORS не буде.
JSONP може бути лише GET. І як з CORS, ви можете використовувати будь-який метод.
І останнє, але не менш важливе значення, якщо ви використовуєте jQuery v1.x , врахуйте, що error
та complete
(або краще fail
і always
) обробники все ще не викликаються для запитів JSONP у деяких поширених ситуаціях (наприклад, помилки в мережі). Звичайно, існують способи вирішення проблем (налаштування тайм-ауту, jQuery-JSONP плагін), але мені здається, що CORS менш дратівливий, особливо коли запити між доменами надходять лише з мобільних пристроїв (тобто гібридних додатків), тому вам не потрібна підтримка нещасних браузерів.
Наш веб-API не працював на Safari (iOS 9.1) з автентифікацією Windows. Він працював із Safari + iOS 8.4. Коли ми перейшли на JSONP, Safari знову почав працювати. Перевірте це посилання для отримання додаткової інформації.