Мой WebAPI был развернут в среде Intranet. Это означает, что безопасность не была моей проблемой.
Кажется, что CORS гораздо более дружелюбен к клиенту и проще реализовать.
Любые другие проблемы, которые я, возможно, пропустил?
Мой WebAPI был развернут в среде Intranet. Это означает, что безопасность не была моей проблемой.
Кажется, что CORS гораздо более дружелюбен к клиенту и проще реализовать.
Любые другие проблемы, которые я, возможно, пропустил?
Это довольно широкий вопрос и может потребовать вики для себя. Существует также довольно многого для 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 должен быть динамическим даже с содержимым memcached.
JSONP по-прежнему является тегом script, поэтому независимо от того, что это вызовет некоторый уровень синхронного поведения. CORS не будет.
JSONP может быть только GET. И как с CORS вы можете использовать любой метод.
И последнее, но не менее важное: если вы используете jQuery v1.x, считайте, что обработчики error
и complete
(или лучше fail
и always
) все еще не вызываются для запросов JSONP в некоторых распространенных ситуациях (например, сетевых ошибок). Конечно, есть обходные пути (настройка тайм-аута, плагин jQuery-JSONP), но я считаю, что CORS менее раздражает, особенно когда кросс-доменные запросы поступают только с мобильных устройств (т.е. гибридных приложений), поэтому вам не нужна поддержка для неудачных браузеров.
Согласно документации Spring, JSONP - это взлом, а не правильное решение для совместного использования ресурсов Cross Origin. Поэтому, если безопасность не является для вас проблемой, просто проверьте источник своего домена на своем сервере и добавьте заголовок Access-Control-Allow-Origin Response.
Наш веб-API не работал с Safari (iOS 9.1) с проверкой подлинности Windows. Он работал с Safari + iOS 8.4. Когда мы перешли на JSONP Safari, он снова начал работать. Для получения дополнительной информации просмотрите эту ссылку.